2017-05-25 72 views
0

我有一个JSCS规则,标识for循环内的函数。我想遵守规则与关闭警告。这是JSCS错误状态中的代码。通过这个和第二个参数回调函数

let sum = 0; 
for (var key in denomGroup) { 
    denomGroup[key].forEach(function (denom) { 
     sum = addToSum(sum, denom) 
    }); 
} 
return sum; 

我这下面尝试和addToSum函数获取对象,但我无法弄清楚如何在和通过,并把它遍历并继续添加其他值

for (var key in denomGroup) { 
    denomGroup[key].forEach(addToSum); 
} 

function addToSum(denom, sum) { //denom has object, sum is empty 
    return sum += denom.sum; 
} 

我也试着

for (var key in denomGroup) { 
    denomGroup[key].forEach(addToSum(sum)); 
} 

function addToSum(sum, denom) { //sum has 0, denom is empty 
    return sum += denom.sum; 
} 

我怎样才能正确地调用外部函数的第一个代码块的意图是什么?我需要避免将sum作为全局变量。

+0

有关使用'Array.reduce()'和不必担心任何的这个怎么样? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce –

回答

2

你并不需要将sum传递给函数,只需在同一范围内声明功能声明sum

let sum = 0; 
 
let denomGroup = { 
 
    a: [1,2,3], 
 
    b: [4,5,6] 
 
}; 
 

 
function addToSum(denom) { 
 
    return sum += denom; 
 
} 
 

 
for (var key in denomGroup) { 
 
    denomGroup[key].forEach(addToSum); 
 
} 
 

 
console.log(sum);

编辑:作为@ScottMarcus指出,sum变量不需要是全局的,只是在与函数定义相同(或更高)的范围内。你可以,例如,封装了整个事情像这样:

function countDenoms(denomGroup) { 
 
    let sum = 0; 
 

 
    function addToSum(denom) { 
 
    sum += denom; 
 
    } 
 

 
    for (var key in denomGroup) { 
 
    denomGroup[key].forEach(addToSum); 
 
    } 
 

 
    return sum 
 
} 
 

 
console.log(countDenoms({ 
 
    a: [1, 2, 3], 
 
    b: [4, 5, 6] 
 
}));

+0

我希望没有'sum'是一个全局变量,如果可能的话 –

+2

@JonHarding它没有必须是全球性的,它可以处于更高的范围。 –

+0

@ScottMarcus完全正确;我已经更新了我的答案以包含详细信息 – Hamms

相关问题