这个Javascript代码是什么意思?

问题描述:

我想要做一个算法的挑战。我从一个完整的答案中看到了这段代码。我是新来的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

一个更简单的例子

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变量设置方法,只有当它还没有被设置为时,该值才会变为值

提供了一个由空格分隔的数字字符串。

计算每个数字的计数。

每次计数是偶数,然后matchingPairCount递增。简而言之:它正在计数匹配数字对。

n不使用?