2012-04-17 57 views
1

嗨我想總結3個json對象中的值。3個對象中的Javascript總和值

var things = { 
    "noun": { 
     "syn": ["belongings", "holding", "stuff", "property"] 
    } 
}; 
var stuff = { 
    "noun": { 
     "syn": ["belongings", "holding", "property"] 
    } 
}; 
var crap = { 
    "noun": { 
     "syn": ["things", "holding", "waste"] 
    } 
}; 

result = {}; 
word1 = things.noun.syn 
for (key in word1) { 
    nk = word1[key]; 
    if (result.nk == undefined) { 
     result.nk = 1 
    } else { 
     result.nk = result.nk + 1; 
    } 
} 
console.log(result);​ 

我得到的結果是result.nk而不是result.belongings例如。

我已經鬼混在的jsfiddle:http://jsfiddle.net/qunUz/2/

如何總結的時候出現的每個值是多少?

+0

順便說一句,你不應該使用for-in循環遍歷數組。改爲使用常規for循環或forEach方法。 – hugomg 2012-04-17 23:23:22

+0

@missingno我以爲你應該使用for-in的對象? (它不是一個數組)。我錯了嗎? – 2012-04-17 23:27:49

+0

那麼,你寫的'word1'中的代碼是一個數組... – hugomg 2012-04-17 23:47:40

回答

1

要訪問一個屬性給出一個字符串值,你應該使用括號標記

result[nk] //access the property defined by nk's value 

,而不是點符號,你正在使用

result.nk  //access the 'nk' property 
result['nk'] //equivalent in bracket notation. 
1

通過設置result.nk不使用變量nk但真的是result.nk

你應當將它保存這樣的:

result[nk] = 1; 

一樣表現出對更新的小提琴:http://jsfiddle.net/qunUz/3/

1

我想這是你正在嘗試做的。以下將總結三個不同數組中每個值的出現次數。

var a = things.noun.syn.concat(stuff.noun.syn).concat(crap.noun.syn); 
var a = a.reduce(function (acc, curr) { 
    if (typeof acc[curr] == 'undefined') { 
    acc[curr] = 1; 
    } else { 
    acc[curr] += 1; 
    } 

    return acc; 
}, {}); 

結果

belongings: 2 
holding: 3 
property: 2 
stuff: 1 
things: 1 
waste: 1 

如果你的目標瀏覽器不具有減少功能,您可以使用underscore.js(或只是複製他們減少功能)。