为什么这个JavaScript数组返回未定义的值?
有人能解释一下,当我使用node运行这个文件时,为什么一个值返回为未定义,而另一个值不包含在列表中为什么这个JavaScript数组返回未定义的值?,javascript,arrays,sorting,hashmap,associative-array,Javascript,Arrays,Sorting,Hashmap,Associative Array,有人能解释一下,当我使用node运行这个文件时,为什么一个值返回为未定义,而另一个值不包含在列表中 0凸轮 1道格 2卡莱布 3大卫 4凯利 5阿帕纳 0凸轮 1道格 2未定义 3大卫 var queue = {}; queue[0] = 'Cam'; queue[1] = 'Doug'; queue[2] = 'Caleb'; queue[3] = 'David'; queue[4] = 'Kelli'; queue[5] = 'Aparna'; var sorted_keys = Ob
- 0凸轮
- 1道格
- 2卡莱布
- 3大卫
- 4凯利
- 5阿帕纳
- 0凸轮
- 1道格
- 2未定义
- 3大卫
var queue = {}; queue[0] = 'Cam'; queue[1] = 'Doug'; queue[2] = 'Caleb'; queue[3] = 'David'; queue[4] = 'Kelli'; queue[5] = 'Aparna'; var sorted_keys = Object.keys(queue).sort(); for (var key in sorted_keys) { console.log(key + " " + queue[key]); } for (var key in sorted_keys) { if (key == 2 || key == 4) { // trying to mock disable accounts and remove delete queue[key]; } } sorted_keys = Object.keys(queue).sort(); for (var key in sorted_keys) { console.log(key + " " + queue[key]); }
排序的\u键
,这是一个键数组,您试图使用数组中的索引值索引到队列
对象,但这是数组索引,而不是队列
对象中的键。您需要从数组中获取实际值,而不是从数组中获取索引,因为队列
对象中的键就在这里
您也不应该使用for/in
来迭代数组,尽管这并不是问题的真正原因
如果您将上一次迭代更改为此,您将看到您期望的结果:
for (i = 0; i < sorted_keys.length; i++) {
key = sorted_keys[i];
console.log(key + " " + queue[key]);
}
for(i=0;i
正在工作的演示:
数组.原型.排序
已就位。您应该停止使用进行。。。在
中迭代JavaScript数组。对于有序集合,请使用数组而不是对象,或者可以随意重新发明控制盘。@pointy:想解释一下为什么吗?@defau1t JavaScript与PHP不同-用于。。。在
中,规范甚至不保证以任何特定顺序显示属性名称!这也会导致V8的优化问题。