2016-11-22 25 views
-2

我有一些代碼計算返回的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

不應該'Object.keys(val)'是'Object.keys(itemToCount)'? – Barmar

+0

是的,對不起,原來玩的太多,錯過了解決這個問題。 –

+0

它可能有幫助 - 在這個例子中val.loads的值是key0 [對象,對象,對象,對象,對象,對象] key1 [對象,對象]和期望的結果是8 –

回答

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); 
+0

謝謝,我錯過了正確的地方重置變量。只需要添加count = 0;每個循環之前都有\t,一切正常,看起來好多了。謝謝! –