为什么这个JavaScript数组返回未定义的值?

为什么这个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

有人能解释一下,当我使用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 = 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的优化问题。