有人可以解释一下,当我使用节点运行此文件时,为什么一个值返回为未定义,而另一个值不包含在列表中。
- 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]);
}
关于javascript - 为什么这个 JavaScript 数组返回未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24621098/