为什么它不添加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值都是最后一个,为什么以及我该怎么办呢?
答案 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,因为它具有相同的对象,但是在每次迭代中都会在数组中添加值。