【发布时间】:2018-06-24 15:34:39
【问题描述】:
这相对简单,但让我烦恼的是我找不到更优雅的解决方案。
假设您有一个 n 维数组的数组,并且您想通过某种方法(比如加法)将具有匹配第 m 个元素的数组压缩在一起。
示例:[[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 中有一个厚脸皮的单线人以一种超级低效的方式完成同样的事情,我也很高兴。
【问题讨论】:
-
如果您搜索“基于属性合并对象”,您将获得比查找数组对象的特殊情况更多的结果。
-
考虑到你的代码已经达到了预期的效果,这个问题可能更适合StackExchange's CodeReview 代替:)
-
m 是如何确定的?是不是一开始就给定的常数?
标签: javascript arrays algorithm optimization