2017-05-18 169 views
-1

我想要做一個算法的挑戰。我從一個完整的答案中看到了這段代碼。我是新來的JavaScript,所以我不完全確定的代碼。我知道代碼的第一部分很大程度上需要輸入並將其輸入到地圖中。然後初始化一個匹配的對數組和一個計數器。我幾乎迷失在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

嘗試'var x = {}; x ['a'] = x ['a'] || 0; console.log(x);'看看會發生什麼 - 當然,下一行也可以包含在這裏...'x ['a'] =(x ['a'] || 0)+ 1' –

+0

@ Andy.W你知道python嗎? 'x ['a'] ||如果沒有屬性'a'(或者屬性評估爲'false'),0'表現爲'defaultdict',評估爲'0'。 '''+ x'是'String(x)'的縮寫。 –

+0

出於興趣是這個挑戰網站?如果是這樣的話? – Ben

回答

0

一個更簡單的例子

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

a被設置爲一個空對象。 a["b"]尚未設置爲任何內容,因此訪問時將返回undefined

未定義是錯誤的 - 所以這有效設置a["b"]0

再舉一個例子;

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

在本例中的唯一區別是,a["b"]是truthy(即,其返回5而不是未定義)。

這是一個JavaScript變量設置方法,只有當它還沒有被設置爲時,該值纔會變爲值

0

提供了一個由空格分隔的數字字符串。

計算每個數字的計數。

每次計數是偶數,然後matchingPairCount遞增。簡而言之:它正在計數匹配數字對。

n不使用?