我需要按元素添加几个数组。也就是说,我有几个长度相等的数组,我只需要一个具有相同数量的元素,即输入之和。Underscore 具有将所有元素折叠为一个并使用函数映射每个元素的方法,但我找不到任何方法将两个数组分段组合。
如果我原来的数组是[1,2,3,4,5,6]
,[1,1,1,1,1,1]
结果[2,2,2,2,2,2]
应该是[4,5,6,7,8,9]
。
我知道我可以通过遍历数组来做到这一点,但想知道使用 underscore.js 函数是否会更容易/更快。我可以做吗?如何?
我需要按元素添加几个数组。也就是说,我有几个长度相等的数组,我只需要一个具有相同数量的元素,即输入之和。Underscore 具有将所有元素折叠为一个并使用函数映射每个元素的方法,但我找不到任何方法将两个数组分段组合。
如果我原来的数组是[1,2,3,4,5,6]
,[1,1,1,1,1,1]
结果[2,2,2,2,2,2]
应该是[4,5,6,7,8,9]
。
我知道我可以通过遍历数组来做到这一点,但想知道使用 underscore.js 函数是否会更容易/更快。我可以做吗?如何?
我认为使用下划线不会更容易。这里有两个选项:
var a = [1,2,3,4,5,6]
, b = [1,1,1,1,1,1]
, c = [2,2,2,2,2,2];
var result = a.map(function(_,i) {
return a[i] + b[i] + c[i];
});
// OR
var result = [];
for (var i = 0; i < a.length; i++) {
result.push(a[i] + b[i] + c[i]);
}
console.log(result); //=> [4,5,6,7,8,9]
您可以使用 lodash ( https://lodash.com/ ) 而不是下划线,它有一个非常酷的 zipWith ( https://lodash.com/docs#zipWith ) 运算符,可以像下面的示例一样工作。(注意 _.add 也是一个 lodash 数学函数)
var a = [1,2,3,4,5,6]
, b = [1,1,1,1,1,1]
, c = [2,2,2,2,2,2];
var result = _.zipWith(a, b, c, _.add);
// result = [4, 5, 6, 7, 8, 9]
您可以将 zip 与 map 和 reduce 结合使用:未经测试,但类似的方法可能有效
var result = _.map(_.zip(array1, array2, array3),function(zipped){return _.reduce(zipped, function(memo, num){ return memo + num; }, 0)});
使用Lodash 4:
var arrays = [
[1, 2, 3, 4, 5, 6],
[1, 1, 1, 1, 1, 1],
[2, 2, 2, 2, 2, 2]
];
var result = _.map(_.unzip(arrays), _.sum);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>