我有两个长度相同的数组,我想以某种方式使用 reduce 方法同时处理它们。像这样的东西:
var arr1 = [2, 3, 4, 5, 6];
var arr2 = [5, 10, 4, 9, 5];
var productSum = arr1.reduce(function(sumOfProducts, item, secondArrayItem) {
/* here I would like to multiply item from arr1 by the item from arr2 at the same index */
return sumOfProducts + item * secondArrayItem;
}, 0, arr2)
console.log(productSum); // 131
一个选项当然是使用 currentIndex
从 arr2
访问正确的项目,但是这个解决方案很难看,因为我正在访问范围之外的变量功能。
我的具体用例是我有一个数组,其中包含 var resources = [2, 5, 4, 6, 2]
之类的资源,我想检查每个项目是否高于相应的资源成本在另一个数组中,例如 var cost = [3, 1, 0, 0, 1]
。
是否有使用 reduce()
函数的一些很好的解决方案?
最佳答案
使用 Ramda您可以先压缩两个列表,然后缩减它并使用解构来提取数组元素并将它们作为参数传递给回调:
const reduceTwo = (callback, initialValue, arr1, arr2) =>
R.reduce((acc, [x, y]) => callback(acc, x, y), initialValue, R.zip(arr1, arr2));
const arr1 = [2, 3, 4, 5, 6];
const arr2 = [5, 10, 4, 9, 5];
console.log(reduceTwo((acc, x, y) => acc + x * y, 0, arr1, arr2));
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.24.1/ramda.min.js"></script>
关于javascript - 我可以使用 array.prototype.reduce() 一次处理两个数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44400091/