javascript for循环对象修改,数组插入

时间:2015-11-08 20:17:27

标签: javascript

为什么它不添加1,2,3,4

var arr = [];
var obb = {view: [], add: []};
for(var i = 0; i < 5;i++) {
    obb.view = i;
    obb.add = i;
    arr.push(obb); 
}

相反,每个obb值都是最后一个,为什么以及我该怎么办呢?

1 个答案:

答案 0 :(得分:0)

您正在声明对象内部的数组没有任何意义,因为您只能在一个数组中分配一个整数,然后在另一个相同的引用对象中再次只向其添加一个数字等......

这是一个有效的例子:

var arr = [];
var obb = 
{
    view: [],
    add: []
};
for (var i = 0; i < 5; i++) {
    obb.view = i;
    obb.add= i;
    arr.push(obb);
    alert(arr[i].view);
    alert(arr[i].add);
}

然而,这是相同的事情(再次使用对象文字)但没有数组,因为你不需要它们:

var obb = 
{
    view:0,
    add:0
};

其余代码保持不变。

最好的做法是填充对象内部的数组,然后通过索引调用对象数组:

var obb = 
{
    view: [],
    add: []
};
for (var i = 0; i < 5; i++) {
    obb.view[i] = i;
}

alert(obb.view[index]);

最后一个例子:

for (var i = 0; i < 5; i++) {
    obb.view[i] = i;
    arr.push(obb);
    alert(arr[i].view);
}

我认为这个例子对学习有好处,因为它演示了对象的行为。每次迭代后都会填充对象内部的数组,并且同一个对象也会被推入另一个数组中。由于我们处理的是同一个对象,您可以看到,如果调用该对象(取决于索引),您将看到正在积累的值。例如,arr [4] .view将输出:0,1,2,3,4,因为它具有相同的对象,但是在每次迭代中都会在数组中添加值。