2013-08-22 26 views
2

我的應用程序具有關於一組固定國家的不同類型的數據,並保持在一致的順序數組中。CoffeeScript:初始化或增加數組中的值

data = 
    oranges: [1,2,3] 
    apples: [1,2,3] 
    cabbages: [1,2,3] 

這些陣列獲得通過各種標準到新的陣列組合,我發現自己想寫這樣的代碼:

fruit = [] 
for key, arr of data     # For each array 
    if key in ['oranges', 'apples']  # It it meets certain criteria 
    for val, i in arr     # Use the values in the creation of a new array 
     fruit[i] += val 

這並不是因爲工作,如果fruit[i]沒有初始化+=韓元」工作。

有多種解決方法。

1)第一填入新fruit陣列用零:

for i in [0..len] 
    fruit[i] = 0 

2)檢查fruit[i]存在:

if fruit[i]? 
    fruit[i] += val 
else 
    fruit[i] = val 

這些都不似乎雅緻。我嘗試將方法2)提取到一個函數中,但我不得不承認,我無法讓我的頭轉向它。我想通過fruit,克隆它(與arr.slice(0)),然後設置fruit到輸出,但它在每次迭代時都不適合這樣做。

數據格式是固定的,但除此之外,我的問題是「處理這個問題的最佳方法是什麼?」我接受使用CoffeeScript和/或ECMAScript 5和/或JQuery的答案。

+0

'array'定義在哪裏? – elclanrs

+0

@elclanrs對不起。修正了錯字。 'array'是'arr' –

+2

'fruit [i] = fruit [i] + 1 || 1'? – david

回答

5

可以使用||=?=操作者初始化數組的元素:

fruit[i] ||= 0 
fruit[i] += val 

唯一的區別是,?=檢查nullundefined||=檢查任何false值。

+9

'fruit [i] =(fruit [i] or 0)+ val' is one-liner alternative too :) – epidemian