两个for循环,一个升序降序创建两个不同的数据结构

时间:2013-08-18 03:26:20

标签: javascript

我有一个数组,我循环两次,一个是从指针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);

现在在我的控制台日志中,它们的出现与此类似:

enter image description here

那么为什么第二个长度为3但只有2个对象呢?为什么第二个console.log在对象前面有数字而不像第一个?

2 个答案:

答案 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';
}