Saya mempunyai peta dengan bulan kunci dan nilai kunci 1
... 31
. Jika saya faham dengan betul, JavaScript menukar kunci peta kepada rentetan.
Selepas mengisih menggunakan standard new Map([...myMap.entries()].sort())
, peta diisih mengikut kekunci seperti berikut:
1, 11, 12, 13, ..., 19, 2, 20, 21, 22, 23, ... 29, 3, 30, 31.
Saya menemui cara untuk menukar kekunci perpuluhan kepada rentetan dan mengisihnya dengan 0
填充單個數字的方法,以實現1,2,3,4,5, ...
:
mykey.toString().padStart(2, "0");
Saya mengesyaki pendekatan ini terlalu direka dan perlu ada beberapa kaedah JavaScript pra-bina untuk mencapai pengisihan peta biasa mengikut nilai perpuluhan kunci.
Ada sebarang cadangan tentang cara mengisih peta JavaScript mengikut kekunci perpuluhan dengan cara yang lebih baik?
Mencubanyanew Map([...myMap.entries()].sort())
- peta diisih sebagai: 1, 11, 12, ..., 19, 2, 20, 21, 22, ... 29, 3, 30, 31.
Walaupun Map()
對象的key
中可以使用任何類型,但在使用默認的sort()
dilaksanakan, ia dilemparkan ke rentetan.
Untuk menyelesaikan masalah ini, anda perlu melaksanakan logik pengisihan anda sendiri untuk membandingkannya secara eksplisit sebagai nilai berangka. Dalam contoh di bawah ia menggunakan integer, tetapi ini boleh dikemas kini dengan mudah untuk digunakan parseFloat()
jika perbandingan perpuluhan diperlukan.
const map = new Map(); map.set(3, "foo"); map.set(1, "foo"); map.set(8, "foo"); map.set(10, "foo"); map.set(5, "foo"); map.set(2, "foo"); map.set(4, "foo"); map.set(7, "foo"); map.set(6, "foo"); map.set(9, "foo"); // does not work: const mapFailedSort = new Map([...map.entries()].sort()); console.log(mapFailedSort); // works: const mapAsc = new Map([...map.entries()].sort((a, b) => +a[0] > +b[0] ? 1 : -1)); console.log(mapAsc)
Nota: Konsol coretan kod nampaknya tidak serasi dengan Map()
objek - sila semak output dalam konsol alat dev untuk melihat sama ada pesanan itu betul.