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

Javascript 两个for循环一个升序一个降序创建两种不同的数据结构,javascript,Javascript,我有一个数组,我循环了两次,一个im从指针0向上循环,另一个im向后循环 但是它们在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 = arra

我有一个数组,我循环了两次,一个im从指针0向上循环,另一个im向后循环

但是它们在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[0,1,2]
var数据=[],
数据2=[];
对于(var i=0;i0;i--){
数据2[i]={};
data2[i].test='Hello';
}
控制台日志(数据);
console.log(data2);
现在,在我的控制台日志中,它们表现出如下不同:


那么,为什么第二个对象的长度为3,但只有2个对象?为什么第二个console.log与第一个不同,在对象前面有数字?

您的内部循环有这种持续的情况:

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

数组的
长度
就是
max(index)+1

创建“稀疏”数组时,中间索引仍然视为存在

console.log(JSON.stringify(data2));
// [null, {"test":"Hello"}, {"test":"Hello"}]
即使实例本身没有它们

console.log('0' in data2);
// false

如果需要使用的键数,可以获取其
长度

可能只是索引

Object.indexes = function (target) {
    return Object.keys(target).filter(function (key) {
        return key === String(parseInt(key, 10));
    });
};

console.log(Object.indexes(data2).length);

请注意,这些代码段需要一个或多个填充。

我知道,因为我只希望它循环两次。啊,好的!我不妨从一开始就将数据设置为对象。
Object.indexes = function (target) {
    return Object.keys(target).filter(function (key) {
        return key === String(parseInt(key, 10));
    });
};

console.log(Object.indexes(data2).length);