2017-02-15 162 views
0

我想要計算唯一字符在字符串中出現多少次。 但我被困在對象迭代,其中它只返回1無論性格多少次同樣出現多個時間:JavaScript對象迭代與for循環

function allUniqueCha(word) { 
 
    var wordObj = {}; 
 
    var wordArray = word.split([, ]); 
 
    wordArray.forEach(function(c) { 
 
    wordObj[c] = +1; 
 
    }); 
 
    console.log(wordArray); 
 
    console.log(wordObj); 
 
} 
 

 
allUniqueCha("Bubble")

輸出爲:{B:1, U:1,b:1,1:1,E:1},但關鍵的 「b」 的預期值應該爲2

+0

什麼是'wordObj [C]'的初始值?當你給它分配'+ 1'會發生什麼? – RobG

回答

4

您寫道:

wordObj[c]=+1; 

隨着索姆Ë格式:

wordObj[c] = +1; 

你總是分配給+1值,這裏沒有增量。嘗試

wordObj[c] = (wordObj[c] || 0)+1; 

而且

var wordArray = word.split([, ]); 

應該是相當

var wordArray = word.split(""); 

function allUniqueCha(word) { 
 
    var wordObj = {}; 
 
    var wordArray = word.split(""); 
 
    wordArray.forEach(function(c) { 
 
    wordObj[c] = (wordObj[c] || 0) +1; 
 
    }); 
 
    console.log(wordArray); 
 
    console.log(wordObj); 
 
} 
 

 
allUniqueCha("Bubble")

0

的思想在我的火車這小豬背上nitial職位。這是解決您正在尋找的問題的一種方法。

function allUniqueCha(word){ 
    let wordArray = word.split([,]); 
    return wordArray.reduce((result, element) => { 
    result[element] = result[element] + 1 || 1; 
    return result; 
    }, {}) 
} 
1

當你這樣做:

wordObj[c] = +1; 

你分配值+1的財產。你想要做的是數值加1,所以:

wordObj[c] += 1; 

然而,最初wordObj[c]不存在,因此你想增加未定義,這將拋出一個錯誤。所以喲必須測試該屬性是否存在,如果不存在,創建一個初始化它。

function allUniqueCha(word) { 
 
    var wordObj = {}; 
 
    var wordArray = word.split([, ]); 
 
    wordArray.forEach(function(c) { 
 
    if (!wordObj.hasOwnProperty(c)){ 
 
     wordObj[c] = 0; 
 
    } 
 
    wordObj[c] += 1; 
 
    }); 
 
    console.log(wordArray); 
 
    console.log(wordObj); 
 
} 
 

 
allUniqueCha("Bubble")

你也可以使用減少

function allUniqueCha(word) { 
 
    return word.split('').reduce(function(acc, c) { 
 
    acc[c] = (acc[c] || 0) + 1; 
 
    return acc; 
 
    },{}); 
 
} 
 

 
console.log(allUniqueCha("Bubble"));