5

++演算子を使用して変数をインクリメントしようとしていますがNaN、結果として取得し続けており、その理由がわかりません。これが私のコードです:

var wordCounts = { };
var x = 0
var compare = "groove is in the heart";
        var words = compare.split(/\b/);
        for(var i = 1; i < words.length; i++){
            if(words[i].length > 2){
                wordCounts["_" + words[i]]++;
            }
        }


alert(wordCounts.toSource());
4

5 に答える 5

10

の値wordCounts["_" + words[i]]は最初は ですundefinedので、++ にすると NaN になります。コードを次のように変更するだけです。

if (wordCounts["_" + words[i]]) {
    wordCounts["_" + words[i]]++;
} else {
    wordCounts["_" + words[i]] = 1;
}
于 2011-11-29T05:06:04.027 に答える
2

次のようなものを試してください...

var key = "_" + words[i];

if (wordCounts[key]) {
    wordCounts[key]++
} else {
    wordCounts[key] = 1;
}

undefinedあなたはあなたに与えているインクリメントしようとしていますNaN

于 2011-11-29T05:08:46.673 に答える
1

++演算子 (数値を取り、それを 1 ずつインクリメントする)を使用できるようにするには、ターゲットに最初に数値が必要です。

オブジェクトが定義されているかどうかを確認し、定義されていない場合は値を 1 に設定して初期化します。

if ('undefined' === typeof wordCounts["_" + words[i]]) {
            wordCounts["_" + words[i]] = 0;
}

何かのようなもの:

var wordCounts = {};
var x = 0
var compare = "groove is in the heart";
var words = compare.split(/\b/);
for (var i = 1; i < words.length; i++) {
    if ('undefined' === typeof wordCounts["_" + words[i]]) {
        wordCounts["_" + words[i]] = 0;
    }
    if (words[i].length > 2) {
        wordCounts["_" + words[i]]++;
    }
}
alert( JSON.stringify( wordCounts ) );
于 2011-11-29T05:05:28.690 に答える
1

基本的にやっていることは

undefined++

その結果...

NaN

試す...

wordCounts["_" + words[i]] = (wordCounts["_" + words[i]]++ || 1);

は「偽の」値であるためNaN、|| 1に戻ります。

于 2011-11-29T05:05:49.253 に答える
0

オブジェクト (wordCounts[]++) をインクリメントしようとしていますが、これは数値ではないためインクリメントできません。そのため、そのエラーが発生します。あなたは実際に何をしようとしていますか(平易な英語で)?

于 2011-11-29T05:05:30.033 に答える