我有一些代码可以计算返回的json中有多少个对象,并给出了总数。
loadCountSetOne = 0;
$.each(dataSetOne.user.customers, function(key, val) {
loads = Object.keys(val.loads).length;
loadCountSetOne = loadCountSetOne + loads;
console.log(loadCountSetOne);
});
这很好用,但是因为我需要计算这些次数,所以我认为我会将它移动到它自己的函数中并在我需要它时调用它counter(val.loads);
count = 0;
function counter(itemToCount) {
result = Object.keys(itemToCount).length;
count = count + result;
console.log(itemToCount, result, count);
return count;
}
当我第一次调用该函数时,我得到了正确的结果。当我再次调用它时,它将第二个结果添加到第一个,依此类推。
我的理解是,这应该是它应该做的,但不是我需要做的。我尝试重置count
的值是不同的地方,但它不起作用。
有没有办法让这个函数在每次调用时根据itemToCount
中的对象数给我一个结果?
感谢。
答案 0 :(得分:1)
您无法在counter()
函数本身中执行此操作,因为它无法区分第一个调用(应该重置变量)与后续调用。您可以传递数组索引,它可以在索引为0
时重置总数,但这不是一个很好的通用解决方案,因为您可能希望以其他方式使用该函数。
您只需要在$.each()
循环之前重置变量:
count = 0;
$.each(dataSetOne.user.customers, function(key, val) {
counter(val.loads);
});
或者你可以使用reduce
,它是为积累价值而设计的。
function counter(total, itemToCount) {
var result = Object.keys(itemToCount).length;
total += result;
console.log(itemToCount, result, total);
return total;
}
var count = dataSetOne.user.customers.reduce(function(total, current) {
return counter(total, current.loads);
}, 0);