2014-06-20 47 views
-2

比方說,我有這樣的的Javascript:計算每個字符和屬性名內部對象存儲

var obj = {"a":0, "b":0, "c":0,....., "z":0}; 

對象和字符串

var str1 = "banana"; 

如何獲得obj的最終結果有

var obj = {"a":3, "b":1,.....,"n":2}; 

+0

你應該發佈你試過的東西。如果你還沒有嘗試過,那麼請做,如果你仍然無法弄清楚,請回來。 – Shmoopy

+0

我添加了一個plunk。看問題。謝謝。 –

回答

1

你也許並不需要,最初的對象,只是用減速器字符數組:

var charFreq = function(x) { 
    return x.split('').reduce(function(acc, x) { 
    return acc[x] = ++acc[x] || 1, acc 
    },{}) 
} 

console.log(charFreq('banana')) 
//^ {b:1, a:3, n:2} 

如果需要其他字母與零值就可以,結果延長初始目標

var abc = 'abcdefghijklmnopqrstuvwxyz' 
    .split('') 
    .reduce(function(a, x){return a[x] = 0, a},{}) 

var extend = function(x, y) { 
    Object.keys(y).forEach(function(k){x[k] = y[k]}) 
    return x 
} 

extend(abc, charFreq('banana')) 

console.log(abc) 
//^ {a:3, b:1, ..., n:2} 
+0

這幾乎解決了我的整個問題。謝謝。但你能解釋一下嗎?我不知道什麼++ acc [x] || 1,acc甚至意味着...... –

+0

看看這是否有所幫助https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce – elclanrs

+0

對不起,我很喜歡JavaScript的新手。我完全迷失了你在分裂部分後用charfreq函數做的事情。我不明白 1)減少 2)線返回acc [x] = ++ acc [x] || 1,acc },{}) –

相關問題