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},但是为什么呢?

最佳答案

如果counts[x]undefined,问题就解决了。在这种情况下,增量不起作用。逻辑“或”(||)评估左侧的值,如果该值是伪造的,则取右侧部分。

因此,例如,如果您分隔行,您将得到

counts[x] || 0


返回counts[x]的真实值,如果undefinedfalsenull甚至是0,则返回值为0的正确部分。

添加和分配应该清楚。

MDN开始:


  在JavaScript中,真实值是在布尔上下文中求值时转换为true的值。除非将它们定义为虚假(即,除了false0""nullundefinedNaN之外),否则所有值都是真实的。

关于javascript - 为什么这种计算数组重复项并将其存储到对象中的方法有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35765959/

10-11 12:39