这是相对简单的,但我无法找到更优雅的解决方案。
假设你有一个n维数组数组,你只想通过某种方法把匹配mth元素的数组挤压在一起,比如说加法。
示例:[[1, 100], [1, 200], [2, 100], [2, 105], [3, 202], [4, 133]]
结果:
[[1, 300], [2, 205], [3, 202], [4, 133]]
我想出的解决办法对我来说真的不雅观有没有办法用更少的代码,或者更有效的方法来实现这一点?

function mergePairs(originalArray) {
  const newArray = [];
  originalArray.forEach((pair) => {
    const foundPair = newArray.find((newPair) => {
      return newPair[0] === pair[0];
    });
    if (foundPair) {
      foundPair[1] += pair[1];
    } else {
      newArray.push(pair);
    }
  });
  return newArray;
}

旁白:如果在Lodash有一个厚颜无耻的班轮,以一种超低效的方式完成同样的事情,我也很高兴。

最佳答案

您可以为您的特定案例使用reducemap

function mergePairs (originalArray) {
  const o = originalArray.reduce((a, e) => (a[e[0]] = ~~a[e[0]] + e[1]) && a, {});
  return Object.keys(o).map(k => [+k, o[k]]);
}

console.log(mergePairs ([[1, 100], [1, 200], [2, 100], [2, 105], [3, 202], [4, 133]]))

10-08 04:15