2017-05-18 24 views
-1

私はアルゴリズムチャレンジをしようとしています。私は完成した答えの一つからこのコードを見ました。私はJavaScriptの初心者ですので、コードは完全にはわかりません。私は、コードの最初のセクションが入力をかなり受け取り、それをマップにすることを知っています。次に、matchingPair配列とカウンタを初期化します。私はforループセクションでかなり失われています。あまりにも確かに何かmatchingPairs[""+c[i]] = matchingPairs[""+c[i]] || 0;はありません。私はforループを推測していますが、配列に一致するペアのすべての要素を追加してカウンタに追加しています。このJavascriptコードは何を意味していますか?

function main() { 
var n = parseInt(readLine()); 
c = readLine().split(' '); 
c = c.map(Number); 

var matchingPairs = {}; 
var matchingPairCount = 0; 

for(var i=0; i< c.length; i++) { 
    matchingPairs[""+c[i]] = matchingPairs[""+c[i]] || 0; 
    matchingPairs[""+c[i]] += 1; 

    if (matchingPairs[""+c[i]] % 2 === 0) { 
     matchingPairCount += 1; 
    } 
} 
console.log(matchingPairCount); 

}

+0

try 'var x = {}; x ['a'] = x ['a'] || 0; (x ['a'] || 0)+ 1'のようになります。 –

+0

@ Andy.WあなたはPythonを知っていますか? 'x ['a'] || 0 'は、プロパティ「a」がないとき(またはプロパティが「false」と評価されるとき)に「0」と評価される「defaultdict」のように振る舞う。 '' + x'は 'String(x)'の略です。 –

+0

これは挑戦のウェブサイトですか?もしそうなら、どちらですか? – Ben

答えて

0

単純な例

a = {} 
a["b"] = a["b"] || 0 
console.log(a) // {b: 0} 

a空のオブジェクトに設定されています。 a["b"]はまだ設定されていないため、アクセスするとundefinedが返されます。

未定義はfalseyなので、効果的にa["b"]0に設定します。

別の例を挙げてください。

a = {b: 5} 
a["b"] = a["b"] || 0 
console.log(a) // {b: 5} 

この例では唯一の違いは、a["b"](すなわち、それは5なく未定義を返す)truthyであることです。

これは変数に変数を設定するjavacriptの方法で、まだ他の何かに設定されていない場合にのみです。

0

空白で区切られた数字の文字列が提供されます。

各数値の数が計算されます。

カウントが偶数になるたびにmatchingPairCountがインクリメントされます。

要約すると、一致する数字のペアがカウントされています。

nは使用されていませんか?

関連する問題