Kısa cevap
new Map([...map].sort((a, b) =>
))
Örneğin, eşit olabilecek değer dizelerini karşılaştırarak, [1] 'e erişen ve 0 döndüren eşittir koşuluna sahip bir sıralama işlevi iletiriz:
new Map([...map].sort((a, b) => (a[1] > b[1] && 1) || (a[1] === b[1] ? 0 : -1)))
Eşit olamayan anahtar dizelerini karşılaştırarak (aynı dize anahtarları birbirinin üzerine yazabilir), eşittir koşulunu atlayabiliriz. Bununla birlikte, yine de açıkça -1 döndürmeliyiz, çünkü bir tembel döndürmek a[0] > b[0]yanlış olarak yanlış verir (0 olarak kabul edilir, yani eşittir) a[0] < b[0]:
new Map([...map].sort((a, b) => a[0] > b[0] ? 1 : -1))
Örneklerle ayrıntılı olarak
.entries()İçinde [...map.entries()](birçok cevapları önerilen) muhtemelen uzağa sizin için JS motoru optimize sürece haritanın fazladan iterasyon ekleyerek gereksiz olduğunu.
Basit test durumunda, sorunun istediğini aşağıdakilerle yapabilirsiniz:
new Map([...map].sort())
... hangi tuşlar bütün dizeleri ise, ezilmiş ve virgülle katıldı anahtar-değer gibi dizeleri zorla karşılaştırır '2-1,foo've '0-1,[object Object]'yeni ekleme talimatıyla yeni bir harita dönen,:
Not: Yalnızca {}SO'nun konsol çıktısında görüyorsanız , gerçek tarayıcı konsolunuza bakın
const map = new Map([
['2-1', 'foo'],
['0-1', { bar: 'bar' }],
['3-5', () => 'fuz'],
['3-2', [ 'baz' ]]
])
console.log(new Map([...map].sort()))
ANCAK , böyle zorlamaya ve zorlamaya güvenmek iyi bir uygulama değildir. Şunlar gibi sürprizlerle karşılaşabilirsiniz:
const map = new Map([
['2', '3,buh?'],
['2,1', 'foo'],
['0,1', { bar: 'bar' }],
['3,5', () => 'fuz'],
['3,2', [ 'baz' ]],
])
console.log('Buh?', new Map([...map].sort()))
for (const iteration of map) {
console.log(iteration.toString())
}
Bunun gibi hataların ayıklanması gerçekten zordur - riske atmayın!
Anahtarlara veya değerlere göre sıralamak istiyorsanız, bunlara bunun gibi sıralama işlevi ile a[0]ve b[0]içinde açıkça erişmek en iyisidir . Biz döndürmesi gerektiğini Not -1ve 1değil, önce ve sonra falseveya 0çiğ gibi a[0] > b[0]o eşittir olarak kabul edilir çünkü:
const map = new Map([
['2,1', 'this is overwritten'],
['2,1', '0,1'],
['0,1', '2,1'],
['2,2', '3,5'],
['3,5', '2,1'],
['2', ',9,9']
])
const sortStringKeys = (a, b) => a[0] > b[0] ? 1 : -1
const sortStringValues = (a, b) => (a[1] > b[1] && 1) || (a[1] === b[1] ? 0 : -1)
console.log('By keys:', new Map([...map].sort(sortStringKeys)))
console.log('By values:', new Map([...map].sort(sortStringValues)))