我有两个相同长度的数组,我想以某种方式用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

一种选择当然是使用arr2currentIndex访问正确的项,但是该解决方案很难看,因为我正在访问函数范围之外的变量。

我的特定用例是,我有一个数组,其资源类似于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>

10-04 22:33
查看更多