forEach()和reduce()不使用参数

时间:2018-03-11 10:28:17

标签: javascript higher-order-functions

我有两个数组(a,b),我的任务是找到它们的体积差异,即我必须将数组a的所有元素相乘,然后对数组b进行相同的操作,然后减去两个以找出差异

我尝试将forEach()reduce()arguments结合使用,但似乎每个数组的最后一个元素都被省略了,而我得到的输出是NaN

这是我的代码

  function findDifference(a, b) {
  var args = Array.prototype.slice.call(arguments);
  var results = [];
  args.forEach(function(argument){
    return argument.reduce(function(a,b){
     results.push(a*b);
    });
  });
  return results;
}

这是我findDifference([3, 2, 5], [1, 4, 4]);

的输出
[6, NaN, 4, NaN]

看起来乘法会在每个数组的第二个元素处停止。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

不是将每个乘法存储在结果数组中,而是可以将每个数组的所有乘法结果存储在result数组中。

function findDifference(a, b) {
  var args = Array.prototype.slice.call(arguments);
  var results = [];
  args.forEach(function(argument){
    results.push(argument.reduce(function(a,b){
      return a*b;
    }));
  });
  
  return results;
}
console.log(findDifference([3, 2, 5], [1, 4, 4]));

答案 1 :(得分:1)

为什么不乘以给定的数组并取结果的增量?



function findDifference(a, b) {
    return [a, b]
        .map(a => a.reduce((a, b) => a * b))
        .reduce((a, b) => a - b);
}

console.log(findDifference([3, 2, 5], [1, 4, 4]));




带参数。



function findDifference(a, b) {
    return Array.prototype
        .map.call(arguments, a => a.reduce((a, b) => a * b))
        .reduce((a, b) => a - b);
}

console.log(findDifference([3, 2, 5], [1, 4, 4]));