Isih peta JavaScript mengikut kekunci perpuluhan
P粉755863750
P粉755863750 2023-09-19 14:44:41
0
1
632

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粉755863750
P粉755863750

membalas semua(1)
P粉501683874

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan