在一个函数中多次使用相同的方法

时间:2019-02-23 21:54:36

标签: javascript

我写了一个函数,其中有两个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]]))

2 个答案:

答案 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]]))