javascript - 为什么这个 JavaScript 数组返回未定义?

标签 javascript arrays sorting hashmap associative-array

有人可以解释一下,当我使用节点运行此文件时,为什么一个值返回为未定义,而另一个值不包含在列表中。

  • 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]);
    }
    

最佳答案

您的主要问题是您正在迭代sorted_keys,它是一个键数组,并且您尝试使用数组中的索引值来索引队列 对象,但这是数组索引,而不是 queue 对象的键。您需要从数组中获取实际值,而不是数组中的索引,因为这是 queue 对象的键所在的位置。

您也不应该使用 for/in 迭代数组,尽管这并不是真正导致问题的原因。

如果您将最后一次迭代更改为此,您将看到您所期望的结果:

for (i = 0; i < sorted_keys.length; i++) {
    key = sorted_keys[i];
    console.log(key + " " + queue[key]);
}

工作演示:http://jsfiddle.net/jfriend00/5dPsR/

关于javascript - 为什么这个 JavaScript 数组返回未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24621098/

相关文章:

javascript - 使用 lodash 将字符串数组转换为树对象的最有效方法是什么?

javascript - 为什么使用多个条件过滤对象数组会返回空数组?

php - 用随机数填充数组,同时遵守指定的总和、计数和数字边界

algorithm - 剖析合并排序例程

javascript - 遍历子组件并渲染每个包裹在高阶组件中

javascript - Jquery 拖放,无需插件

javascript - 如何获取超过选择输入的数据属性?

javascript - 为什么选择选项更改事件不能有 this 和 event.target 来获取所选值?

java - MapReduce(二级)排序/过滤 - 如何?

python - Argsort 以相反的顺序返回负值