使用 JavaScript 对 Map 中的键进行排序

使用 JavaScript 对 Map 中的键进行排序

Sort the Keys in a Map using JavaScript

使用该sort()方法对 Map 中的键进行排序,例如
const sorted = new Map([...map1].sort()). 扩展语法 (…) 用于获取 Map 条目的数组,我们可以使用sort方法对其进行排序。

索引.js
// ✅ When Keys are STRINGS const map1 = new Map([ ['z', 'three'], ['a', 'one'], ['b', 'two'], ]); // 👇️ {'z' => 'three', 'a' => 'one', 'b' => 'two'} console.log(map1); // ✅ Sort Ascending (low to high) const sortedAsc = new Map([...map1].sort()); // 👇️ {'a' => 'one', 'b' => 'two', 'z' => 'three'} console.log(sortedAsc); // ✅ Sort Descending (high to low) const sortedDesc = new Map([...map1].sort().reverse()); console.log(sortedDesc); // 👉️ {'z' => 'three', 'b' => 'two', 'a' => 'one'} // --------------------------------------------------------- // ✅ When keys are NUMBERS const map2 = new Map([ [3, 'three'], [1, 'one'], [2, 'two'], ]); // ✅ Sort Ascending (low to high) const sortNumAsc = new Map([...map2].sort((a, b) => a[0] - b[0])); // 👇️ {1 => 'one', 2 => 'two', 3 => 'three'} console.log(sortNumAsc); // ✅ Sort Descending (high to low) const sortedNumDesc = new Map([...map2].sort((a, b) => b[0] - a[0])); // 👇️ {3 => 'three', 2 => 'two', 1 => 'one'} console.log(sortedNumDesc);

Map对象会记住键的

插入顺序。

这就是为什么我们使用
Map()Map构造函数以正确的顺序
创建一个新的。

扩展语法 (…)
允许我们获取包含 Map 条目的数组

索引.js
const map1 = new Map([ ['z', 'three'], ['a', 'one'], ['b', 'two'], ]); // 👇️ [['z', 'three'], ['a', 'one'], ['b', 'two']] console.log([...map1]);

使用字符串键对 Map 进行排序时,我们只需调用
sort()
方法即可。

索引.js
const map1 = new Map([ ['z', 'three'], ['a', 'one'], ['b', 'two'], ]); // 👇️ [['a', 'one'], ['b', 'two'], ['z', 'three']] console.log([...map1].sort());
这为我们提供了一个包含键值对数组的数组,我们可以将其直接传递给Map构造函数以创建一个具有排序键的新数组。 Map

这是完整的代码片段:

索引.js
// ✅ When Keys are STRINGS const map1 = new Map([ ['z', 'three'], ['a', 'one'], ['b', 'two'], ]); // 👇️ {'z' => 'three', 'a' => 'one', 'b' => 'two'} console.log(map1); // ✅ Sort Ascending (low to high) const sortedAsc = new Map([...map1].sort());
当在键值对数组上调用该sort()方法时,我们只是简单地对键值对的字符串转换进行排序,例如z,threevs a,one

我们使用相同的方法按降序对 Map 的键进行排序。我们所要做的就是reverse()在排序后添加对该方法的调用。

索引.js
// ✅ When Keys are STRINGS const map1 = new Map([ ['z', 'three'], ['a', 'one'], ['b', 'two'], ]); // ✅ Sort Descending (high to low) const sortedDesc = new Map([...map1].sort().reverse()); console.log(sortedDesc); // 👉️ {'z' => 'three', 'b' => 'two', 'a' => 'one'}

如果 Map 的键是数字,则必须将函数传递给该sort()
方法。

该方法采用的参数是定义排序顺序的函数。

该函数使用2参数调用。在我们的示例中,有 2 个包含键值对的数组。

索引.js
const map2 = new Map([ [3, 'three'], [1, 'one'], [2, 'two'], ]); // ✅ Sort Ascending (low to high) const sortNumAsc = new Map([...map2].sort((a, b) => a[0] - b[0])); // 👇️ {1 => 'one', 2 => 'two', 3 => 'three'} console.log(sortNumAsc);

sort()方法使用以下逻辑对数组中的元素进行排序:

  • 如果比较函数的返回值大于,则
    0排序ba

  • 如果比较函数的返回值小于,则
    0排序ab

  • 如果比较函数的返回值等于0,则保持原先的顺序ab

在上面的代码片段中:

  • 如果数组中的第一个元素(键)a减去数组中的第一个元素
    b返回的值大于,我们之前0排序ba
  • 如果减法返回一个负数,我们就a先排序b
  • 如果减法返回,我们将保留0的原始顺序ab

发表评论