为什么不't此代码循环遍历对象的所有属性
Why doesn't this code loop through all properties of an object?
这里有一个小代码片段:
cards = [ 4, 10, 3, 12, 10, 13, 12 ];
suits = [ 1, 64, 8, 8, 1, 1, 32 ];
var o = {}, keyCount = 0, j;
for (i = 0; i < cards.length; i++) {
e = cards[i] + suits[i];
o[e] = 1
}
for (j in o) {
if (o.hasOwnProperty(j)) {
keyCount++;
}
}
经过一些调试,我发现当我迭代"o"对象(第二个循环)中的所有属性时,循环只执行6次,而不是7次。
尽管在第一个循环中向"o"对象添加了7个属性,但情况依然如此。
为什么会这样?我在第一个循环中添加了7个属性,那么为什么第二个循环只执行6次呢?
原因并不是像Pointy在评论中所说的那样,数字12在卡片数组中出现了两次。他说两处房产不可能具有相同的价值,这让我明白了这一点。我说的是e = cards[i] + suits[i];
,碰巧有时这两个值加在一起有时会得到相同的答案。例如,在本例中3+8=11,10+1也=11
Javascript对象不能有重复的键&上面的片段违反了这一点,这是因为3+8&10+1都等于11。在这种情况下,它将占据最新的价值。所以钥匙必须是独一无二的。因此,更改整数以产生不同的和值。
cards = [ 4, 10, 3, 12, 11, 13, 12 ];
suits = [ 1, 64, 8, 8, 1, 1, 32 ];
工作副本
正如大多数人所注意到的,您的对象中存在重复项。如果您想处理当前的输入数据,请尝试将数字连接为字符串,而不是将它们相加——这将为您提供一组更大的可能值。类似的东西
e = cards[i]+":"+suits[i];
所以在你的物体中会有"4:1","10:64"形式的键。这很好,因为如果以后需要,您还可以将它们拆分以再次获得初始值。
相关文章:
- 循环遍历以数组为值的Javascript对象
- 如何遍历包含对象的数组-javascript
- 遍历 JSON 对象并检查 URL 是否以某个值结尾
- 遍历AngularJs中的对象
- 无法在javascript中循环遍历对象数组
- 在循环遍历对象 HTMLDivElement 时,应用 ChileNode 样式 zindex 在 firefox 和
- 我想遍历一个对象数组,我不想要任何重复项
- 使用函数for循环遍历对象以更改值,然后返回结果
- 如何遍历 JSON 对象以适合 JavaScript 数组
- 循环遍历 JSON 对象
- 遍历对象会导致无限循环
- 动态对象遍历与 NodeJS
- Javascript 尝试遍历对象数组以显示其属性
- 用jQuery遍历JSON对象
- 遍历对象项
- 如何遍历javascript对象
- 继承对象.遍历所有对象
- 如何用多个对象遍历json
- 嵌套的JSON.解析错误和JS对象遍历错误没有被JS的try/catch捕获,崩溃服务器
- 对象遍历在Three.js中是什么意思?