为什么这种用于计算数组重复并将其存储到对象中的方法有效
Why does this method for counting duplicates of an array and storing it into an object work?
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
,问题就出现了。在这种情况下,增量不起作用。逻辑"or"(||
)计算左侧的值,如果该值是假的,则取右部分。
例如,如果你把线分开,你会得到
counts[x] || 0
它返回counts[x]
的真值,如果返回undefined
,false
,null
,甚至返回0
则返回值为0
的右部分。
添加和分配应明确。
直接来自 MDN:
在 JavaScript 中,真值是在布尔上下文中评估时转换为 true 的值。所有值都是真值,除非它们被定义为假值(即,除了
false
、0
、""
、null
、undefined
和NaN
)。
相关文章:
- 访问存储对象
- 在 Jquery 中,我可以存储对象引用并在以后使用它吗?
- 在JSON中存储对象引用
- 在外部JSON文件中存储对象数组
- 如何使用 json.stringify 在 cookie 中正确存储对象数组
- 将数据追加到本地存储对象
- 在 Javascript 中存储对象的当前状态的最佳实践是什么?
- 在 chrome.storage 中正确存储对象
- 存储对象事件的内容
- 本地存储对象数组:仅将新对象推送到数组中(如果唯一)
- jQuery选择器存储对象?如何强迫它不这样做
- 如何在 html5 的本地存储对象中存储数组
- 基于另一个对象键/值存储对象值
- JavaScript:如何在数组中存储对象
- 用于在javascript中存储对象的类型化数组
- 我可以将javascript存储在本地存储对象中并运行它吗
- 如何在HTML元素中存储对象引用
- 如何使用jQuery$.cokie()在cookie中存储对象数组
- 如何在JavaScript中访问和存储对象数组
- 是否有一个好的方法来存储对象的引用