在 JavaScript 中按值对地图进行排序

在 JavaScript 中按值对地图进行排序

Sort a Map by Value in JavaScript

按值对 Map 进行排序:

  1. 使用扩展语法 (…) 获取 Map 条目的数组
  2. sort()在数组上调用方法
  3. 将结果传递给Map()构造函数
索引.js
// ✅ When VALUES are NUMBERS const map2 = new Map([ ['three', 3], ['one', 1], ['two', 2], ]); // ✅ Sort by Value Ascending (low to high) const sortNumAsc = new Map([...map2].sort((a, b) => a[1] - b[1])); // 👇️ {'one' => 1, 'two' => 2, 'three' => 3} console.log(sortNumAsc); // ✅ Sort by Value Descending (high to low) const sortedNumDesc = new Map([...map2].sort((a, b) => b[1] - a[1])); // 👇️ {'three' => 3, 'two' => 2, 'one' => 1} console.log(sortedNumDesc); // ✅ When VALUES are STRINGS const map1 = new Map([ ['three', 'c'], ['one', 'a'], ['two', 'b'], ]); // ✅ Sort by Value Ascending (low to high) const sortedAsc = new Map([...map1].sort((a, b) => (a[1] > b[1] ? 1 : -1))); // 👇️ {'one' => 'a', 'two' => 'b', 'three' => 'c'} console.log(sortedAsc); // ✅ Sort by Value Descending (high to low) const sortedDesc = new Map([...map1].sort((a, b) => (a[1] > b[1] ? -1 : 1))); // 👇️ {'three' => 'c', 'two' => 'b', 'one' => 'a'} console.log(sortedDesc);

该代码片段显示了如何按值对字符串和数字值按升序和降序对 Map 进行排序。

Map对象会记住键的

插入顺序。

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

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

索引.js
const map2 = new Map([ ['three', 3], ['one', 1], ['two', 2], ]); // 👇️ [['three', 3], ['one', 1], ['two', 2]] console.log([...map2]);

下一步是调用数组的
sort()
方法,并向其传递一个函数。

我们传递给sort()方法的函数定义了排序顺序。

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

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

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

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

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

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

在上面的代码片段中:

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

如果需要按降序对 Map 进行降序排序,只需从 的值中减去 的值a即可b

索引.js
// ✅ When VALUES are NUMBERS const map2 = new Map([ ['three', 3], ['one', 1], ['two', 2], ]); // ✅ Sort by Value Descending (high to low) const sortedNumDesc = new Map([...map2].sort((a, b) => b[1] - a[1])); // 👇️ {'three' => 3, 'two' => 2, 'one' => 1} console.log(sortedNumDesc);

我们使用相同的方法按字符串值对 Map 进行排序。

索引.js
// ✅ When VALUES are STRINGS const map1 = new Map([ ['three', 'c'], ['one', 'a'], ['two', 'b'], ]); // ✅ Sort by Value Ascending (low to high) const sortedAsc = new Map([...map1].sort((a, b) => (a[1] > b[1] ? 1 : -1))); // 👇️ {'one' => 'a', 'two' => 'b', 'three' => 'c'} console.log(sortedAsc);

这次我们检查数组中值的 UTF-16 编码单元值a是否大于数组中的值,如果是则b返回,
否则返回。
1-1

如果我们返回1(大于 0),那么我们b在 之前排序a

您可以通过更改 和 的位置来将顺序更改为1降序
-1

索引.js
// ✅ When VALUES are STRINGS const map1 = new Map([ ['three', 'c'], ['one', 'a'], ['two', 'b'], ]); // ✅ Sort by Value Descending (high to low) const sortedDesc = new Map([...map1].sort((a, b) => (a[1] > b[1] ? -1 : 1))); // 👇️ {'three' => 'c', 'two' => 'b', 'one' => 'a'} console.log(sortedDesc);

发表评论