我有两个数组(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]
看起来乘法会在每个数组的第二个元素处停止。有什么想法吗?
答案 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]));