【问题标题】:Sorting map by key returns sorted Map object with the first key in last index按键排序映射返回排序后的 Map 对象,其中第一个键在最后一个索引中
【发布时间】:2022-01-06 00:09:15
【问题描述】:

以下函数从两个数组创建一个 Map 对象。我正在尝试使用 sort 方法将地图按键排序到新的 Map 对象中,如 Mozilla Docs 所示。除了将第一个键放在最后一个索引之外,mapSort 对象正确地对所有键进行排序。

const sortMapByKey = () => {
  const keyArray = [4, 6, 16, 18, 2]
  const valueArray = [103, 123, 4444, 99, 2000]

  const buildMap = (keys, values) => {
      const map = new Map();
      for(let i = 0; i < keys.length; i++){
        map.set(keys[i], values[i]);
      };
      const mapSort = new Map([...map.entries()].sort(function(a, b) {
        return a - b;
      }));
      return mapSort
    };  
    
    return buildMap(keyArray, valueArray)
}

当前输出:

Map { 4 => '103', 6 => '123', 16 => '4444', 18 => '99', 2 => '2000' }

想要的输出:

Map {  2 => '2000', 4 => '103', 6 => '123', 16 => '4444', 18 => '99' }

任何关于我在排序方面做错了什么的线索?

【问题讨论】:

  • 99 来自哪里?
  • 这些值来自一个不太相关的更长的函数,所以我将它们提取到变量中以便于测试。
  • 我的错,99 应该是 keyArray 中的第 4 项。谢谢

标签: javascript arrays sorting


【解决方案1】:

条目是键值对,例如[1, 103]。执行return a - b 会尝试将两个这样的数组相减,这没有意义 - 您需要先从条目对中提取 key

const mapSort = new Map([...map.entries()].sort(function(entryA, entryB) {
  return entryA[0] - entryB[0];
}));

const keyArray = [4, 6, 16, 18, 2]
const valueArray = [103, 123, 4444, 2000]

const buildMap = (keys, values) => {
  const map = new Map();
  let objectArray = []
  for (let i = 0; i < keys.length; i++) {
    map.set(keys[i], values[i]);
  };
  const mapSort = new Map([...map.entries()].sort(function(entryA, entryB) {
    return entryA[0] - entryB[0];
  }));
  return mapSort
};

console.log(buildMap(keyArray, valueArray));

或解构:

const mapSort = new Map(
  [...map.entries()]
    .sort(([a], [b]) => a - b)
);

const keyArray = [4, 6, 16, 18, 2]
const valueArray = [103, 123, 4444, 2000]

const buildMap = (keys, values) => {
  const map = new Map();
  let objectArray = []
  for (let i = 0; i < keys.length; i++) {
    map.set(keys[i], values[i]);
  };
  const mapSort = new Map(
    [...map.entries()]
      .sort(([a], [b]) => a - b)
  );
  return mapSort
};

console.log(buildMap(keyArray, valueArray));

【讨论】:

    猜你喜欢
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 2021-11-22
    • 2015-10-17
    • 2022-07-29
    • 2013-11-19
    • 2021-09-23
    相关资源
    最近更新 更多