我写了一个函数,其中有两个reduce()
方法。 有一个数组数组,该函数应该先在每个子数组中减去元素,然后添加接收到的元素。尽管它可以工作,但从“ DRY”原理的角度来看,我认为这样做不好。如果有人对我的代码发表评论,我将不胜感激。谢谢。
let result = function(arr){
return arr.map((item) => item.reduce((a, b) => a - b)).reduce((c, d) => c + d);
};
console.log(result([[8,1],[4,11],[3,9]]))
答案 0 :(得分:1)
如果该功能仅适用于元组数组,则不会使用reduce
进行映射。只是写
function result(arr) {
return arr.map(([a, b]) => a - b).reduce((c, d) => c + d, 0);
}
请不要忘记将0
作为初始值传递给求和的reduce
,这样,如果您传递一个空数组,您的函数仍然可以工作。
您可以通过将map
融合到reduce
中来进一步缩短上述时间:
function result(arr) {
return arr.reduce((c, [a, b]) => c + a - b, 0);
}
答案 1 :(得分:0)
为补充@Bergi的答案,您还可以将操作提取到自己的函数中,以使其更具可读性:
const arraySub = arr => arr.reduce((a, b) => a - b);
const arraySum = arr => arr.reduce((a, b) => a + b);
const subAndSum = arr => arraySum(arr.map(arraySub));
console.log(subAndSum([[8,1],[4,11],[3,9]]))