为什么这个JavaScript数组返回undefined?

时间:2014-07-07 22:44:07

标签: javascript arrays sorting hashmap associative-array

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

  • 0 Cam
  • 1 Doug
  • 2 Caleb
  • 3 David
  • 4 Kelli
  • 5 Aparna
  • 0 Cam
  • 1 Doug
  • 2 undefined
  • 3 David

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

1 个答案:

答案 0 :(得分:1)

您的主要问题是您正在迭代sorted_keys这是一个键数组,并且您尝试使用数组中的索引值来索引queue对象,但那是数组索引,而不是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/