Rumah > Soal Jawab > teks badan
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.
P粉5016838742023-09-20 12:24:53
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.