Heim  >  Fragen und Antworten  >  Hauptteil

Sortieren Sie die JavaScript-Karte nach Dezimalschlüssel

Ich habe eine Karte mit Schlüsselmonat und Schlüsselwert 1... 31. Wenn ich das richtig verstehe, wandelt JavaScript die Schlüssel der Karte in Zeichenfolgen um.

Nach der Sortierung mit dem Standard new Map([...myMap.entries()].sort()) wird die Karte wie folgt nach Schlüssel sortiert:

1, 11, 12, 13, ..., 19, 2, 20, 21, 22, 23, ... 29, 3, 30, 31.

Ich habe eine Möglichkeit gefunden, Dezimalschlüssel in Zeichenfolgen umzuwandeln und sie mit 0填充单个数字的方法,以实现1,2,3,4,5, ...:

zu sortieren
mykey.toString().padStart(2, "0");

Ich vermute, dass dieser Ansatz zu kompliziert ist und es eine vorgefertigte JavaScript-Methode geben sollte, um eine normale Kartensortierung nach dem Dezimalwert des Schlüssels zu erreichen.

Irgendwelche Vorschläge, wie man JavaScript-Karten besser nach Dezimalschlüssel sortieren kann?

Habe es ausprobiertnew Map([...myMap.entries()].sort()) - die Karte ist sortiert nach: 1, 11, 12, ..., 19, 2, 20, 21, 22, ... 29, 3, 30, 31.

P粉755863750P粉755863750396 Tage vor597

Antworte allen(1)Ich werde antworten

  • P粉501683874

    P粉5016838742023-09-20 12:24:53

    尽管在Map()对象的key中可以使用任何类型,但在使用默认的sort()实现时,它们会被强制转换为字符串。

    要解决这个问题,您需要实现自己的排序逻辑,明确地将它们作为数值进行比较。在下面的示例中,它使用整数,但如果需要进行小数比较,可以轻松地更新为使用parseFloat()

    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)

    注意:代码片段控制台似乎与Map()对象不太兼容 - 请在开发工具控制台中检查输出以查看排序是否正确。

    Antwort
    0
  • StornierenAntwort