在循环中设置数组不起作用javascript

时间:2017-09-05 09:32:40

标签: javascript arrays

我尝试在多个循环中设置数组的值,但是当我尝试获取第一个循环的索引时,我只是得到最后一个。

像这样的例子

start_date = 1;
end_date = 4;
parent = [];
item = [
{item : 1},
{item : 2},
{item : 3} 
];

for(i = start_date;i <= end_date;i++){
   for(x = 0; x < item.length; x++){
       item[x].parent = i;
   }
parent.push(item)
}

但输出总是4,

parent = [
    [
      {item : 1,parent : 1},
      {item : 2,parent : 1},
      {item : 3,parent : 1},
    ],
    [
      {item : 1,parent : 2},
      {item : 2,parent : 2},
      {item : 3,parent : 2},
    ],
    [
      {item : 1,parent : 3},
      {item : 2,parent : 3},
      {item : 3,parent : 3},
    ],
    [
      {item : 1,parent : 4},
      {item : 2,parent : 4},
      {item : 3,parent : 4},
    ],
]

我希望输出像

抱歉我的英文不好

1 个答案:

答案 0 :(得分:1)

将第一个Iteratiton中的数组中的元素设置为1,将第二个中的元素设置为2 ...并将最后一个中的元素设置为4。

所以输出是正确的,你想要达到什么目的?

在问题更新后编辑:

你的问题是,你总是在你的所有数组中引用相同的对象。但是每次调用item[x].parent = i时都会覆盖此对象,因此您必须在Array中创建foreaach元素,并在其上创建一个对象。

start_date = 1;
end_date = 4;
parent = [];
item = [
{item : 1},
{item : 2},
{item : 3} 
];

for(i = start_date;i <= end_date;i++){
   var temp = [];
   for(x = 0; x < item.length; x++){
   temp[x] = {};
   temp[x].item = item[x].item;
   temp[x].parent = i
   }
parent.push(temp)
}