为什么这种方法可以计算数组的重复数并将其存储到对象中?

时间:2016-03-03 07:39:37

标签: javascript

var counts = {};
var your_array = ['a', 'a', 'b', 'c'];
your_array.forEach(function(x) { 
  counts[x] = (counts[x] || 0) + 1; 
});
console.log(your_array);

在javascript中,为什么必须counts[x] = (counts[x] || 0) + 1;为什么没有counts[x] += 1;工作?

这将输出{ a: 2, b: 1, c: 1},但为什么?

1 个答案:

答案 0 :(得分:2)

如果counts[x]undefined,则会出现问题。在这种情况下,增量不起作用。逻辑"或" ||)评估左侧的值,如果该值为假,则采用正确的部分。

例如,如果你分开这行,就得到

counts[x] || 0

返回counts[x]的真值,undefinedfalsenull,偶数0,然后返回值0的右边部分1}}。

添加和分配应该清楚。

MDN开始:

  

在JavaScript中, truthy 值是在布尔上下文中计算时转换为true的值。所有值都是真实的,除非它们被定义为假(即false0""nullundefined和{{1}除外})。