我有一个数组,我循环两次,一个是从指针0向上循环,另一个是向后循环。
但是他们在console.log中产生了不同的数组布局,我觉得很奇怪......这就是我所拥有的:
//array has a length of 3 [0,1,2]
var data = [],
data2 = [];
for(var i = 0; i < array.length-1; i++){
data[i] = {};
data[i].test = 'Hello';
}
for(var i = array.length - 1; i > 0; i--){
data2[i] = {};
data2[i].test = 'Hello';
}
console.log(data);
console.log(data2);
现在在我的控制台日志中,它们的出现与此类似:
那么为什么第二个长度为3但只有2个对象呢?为什么第二个console.log在对象前面有数字而不像第一个?
答案 0 :(得分:2)
length
的{{1}}只是Array
。
创建“稀疏”数组时,中间索引仍被视为现有索引。
max(index) + 1
即使实例本身没有它们。
console.log(JSON.stringify(data2));
// [null, {"test":"Hello"}, {"test":"Hello"}]
如果您想要使用的密钥数,可以获得其Object.keys()
的console.log('0' in data2);
// false
:
length
可能filtering只是索引。
console.log(Object.keys(data2).length);
// 2
请注意,这些代码段需要ES5-based engine或polyfill。
答案 1 :(得分:0)
你的内循环有这样的持续条件:
i > 0
在它到达data2 [0]位置之前停止它。
因此,您需要设置data2 [2]然后再设置data2 [1]。 data2 [0]仍未设置,但它仍然在数组中(它仍然是指针位置)。
这就是你要找的东西
for(var i = array.length - 2; i >= 0; i--){
data2[i] = {};
data2[i].test = 'Hello';
}