Heim > Fragen und Antworten > Hauptteil
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, ...
:
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粉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()
对象不太兼容 - 请在开发工具控制台中检查输出以查看排序是否正确。