2017-02-15 9 views
0

文字列内に一意の文字が何回表示されるかを調べようとしています。 しかし、私はそれが唯一の文字が複数回出現回数と同じに関係なく、1を返していないオブジェクトの繰り返しで立ち往生しています:forループを使用したJavascriptオブジェクト反復

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、L:1、E:1}が、キー "B" の期待値があるべき2

+0

'wordObj [C]'の初期値とは何ですか? '+ 1'を指定するとどうなりますか? – RobG

答えて

4

あなたが書いた:

wordObj[c]=+1; 

SOMでe書式:

wordObj[c] = +1; 

値には常にを割り当てますが、増分はありません。あなたのIにおける思考の電車の中ではなく

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

このピギーバックする必要があります

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

そして

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

をお試しくださいニニアルポスト。あなたが探している問題を解決する一つの方法です。

あなたが
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"));

関連する問題