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]
的真实值,如果undefined
,false
,null
甚至是0
,则返回值为0
的正确部分。添加和分配应该清楚。
从MDN开始:
在JavaScript中,真实值是在布尔上下文中求值时转换为true的值。除非将它们定义为虚假(即,除了
false
,0
,""
,null
,undefined
和NaN
之外),否则所有值都是真实的。关于javascript - 为什么这种计算数组重复项并将其存储到对象中的方法有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35765959/