Javascript 将对象文字推入数组(重复自身..)

Javascript 将对象文字推入数组(重复自身..),javascript,angularjs,Javascript,Angularjs,我不认为这是一个真正的角度问题,尽管我在使用角度ng repeat指令时偶然发现了这个问题 我试图使用push将javascript对象文本存储到一个数组中,以便在ng repeat中迭代 例如: $scope.items = []; var item = { name: "bob" }; $scope.items.push(item); item.name = "mary"; $scope.items.push(item); 此时,$scope.items[]包含两个名为Mary的

我不认为这是一个真正的角度问题,尽管我在使用角度ng repeat指令时偶然发现了这个问题

我试图使用push将javascript对象文本存储到一个数组中,以便在ng repeat中迭代

例如:

$scope.items = [];

var item = {
   name: "bob"
};

$scope.items.push(item);
item.name = "mary";
$scope.items.push(item);
此时,$scope.items[]包含两个名为Mary的实例,而不是Bob和Mary。这是违反直觉的,因为我认为push应该只是将下一项附加到数组的末尾

我的真实代码(摘要)如下所示:

$scope.items = [];

var item = {
   name: "";
};

for (var i = 0; i < 10; i++) {
   // I dynamically set the item.name to some value using retrieved values from server
   item.name = someValueFromServer;

   $scope.items.push(item);
}
$scope.items=[];
变量项={
姓名:”;
};
对于(变量i=0;i<10;i++){
//我使用从服务器检索到的值动态地将item.name设置为某个值
item.name=someValueFromServer;
$scope.items.push(项目);
}
同样,在for循环的末尾,我没有使用10个不同的名称,而是使用与上次检索到的名称相同的10个名称

我不太明白如何解决这个问题,也无法在网上找到任何东西。我是个新手,所以可能是我找错了东西


任何帮助都会很棒。非常感谢

每次都会覆盖相同的对象

for (var i = 0; i < 10; i++) {
    var item = {
       name: someValueFromServer;
    };
    $scope.items.push(item);
}
for(变量i=0;i<10;i++){
变量项={
名称:someValueFromServer;
};
$scope.items.push(项目);
}

每次都会覆盖相同的对象

for (var i = 0; i < 10; i++) {
    var item = {
       name: someValueFromServer;
    };
    $scope.items.push(item);
}
for(变量i=0;i<10;i++){
变量项={
名称:someValueFromServer;
};
$scope.items.push(项目);
}

每次都会覆盖相同的对象

for (var i = 0; i < 10; i++) {
    var item = {
       name: someValueFromServer;
    };
    $scope.items.push(item);
}
for(变量i=0;i<10;i++){
变量项={
名称:someValueFromServer;
};
$scope.items.push(项目);
}

每次都会覆盖相同的对象

for (var i = 0; i < 10; i++) {
    var item = {
       name: someValueFromServer;
    };
    $scope.items.push(item);
}
for(变量i=0;i<10;i++){
变量项={
名称:someValueFromServer;
};
$scope.items.push(项目);
}

如前所述,您正在将对象引用推入scope.items,然后更改对象。导致更新其所有引用

以下是一些备选方案:

var scope = {};
scope.items = [];
var arr = [1,2,3,4,5];

//Passing an anonymous object
for( var i = 0, len = arr.length; i < len; i++){
    scope.items.push({name: arr[i]}); 
}

console.log(scope.items); ////[ { name: 1 }, { name: 2 }, { name: 3 }, { name: 4 }, { name: 5 } ]

function Item(value){
    this.value = value;
}

//Or with a defined object
scope.items2 = [];

for(var i =0, len =arr.length; i < len; i++){
    scope.items2.push(new Item(arr[i]));
}

console.log(scope.items2); //[ { value: 1 }, { value: 2 }, { value: 3 }, { value: 4 }, { value: 5 } ]

//Or to declare item inside of the for loop, so that it is reinitialized each time
scope.items3 = [];

for(var i =0, len = arr.length; i < len; i++){
    var item = { name: 'somevalue ' + i };
    scope.items3.push(item);
}

console.log(scope.items3); /*[ { name: 'somevalue 0' },
                             { name: 'somevalue 1' },
                             { name: 'somevalue 2' },
                             { name: 'somevalue 3' },
                             { name: 'somevalue 4' } ]*/
var scope={};
scope.items=[];
var-arr=[1,2,3,4,5];
//传递匿名对象
对于(变量i=0,len=arr.length;i
如前所述,您正在将对象引用推入scope.items,然后更改对象。导致更新其所有引用

以下是一些备选方案:

var scope = {};
scope.items = [];
var arr = [1,2,3,4,5];

//Passing an anonymous object
for( var i = 0, len = arr.length; i < len; i++){
    scope.items.push({name: arr[i]}); 
}

console.log(scope.items); ////[ { name: 1 }, { name: 2 }, { name: 3 }, { name: 4 }, { name: 5 } ]

function Item(value){
    this.value = value;
}

//Or with a defined object
scope.items2 = [];

for(var i =0, len =arr.length; i < len; i++){
    scope.items2.push(new Item(arr[i]));
}

console.log(scope.items2); //[ { value: 1 }, { value: 2 }, { value: 3 }, { value: 4 }, { value: 5 } ]

//Or to declare item inside of the for loop, so that it is reinitialized each time
scope.items3 = [];

for(var i =0, len = arr.length; i < len; i++){
    var item = { name: 'somevalue ' + i };
    scope.items3.push(item);
}

console.log(scope.items3); /*[ { name: 'somevalue 0' },
                             { name: 'somevalue 1' },
                             { name: 'somevalue 2' },
                             { name: 'somevalue 3' },
                             { name: 'somevalue 4' } ]*/
var scope={};
scope.items=[];
var-arr=[1,2,3,4,5];
//传递匿名对象
对于(变量i=0,len=arr.length;i
如前所述,您正在将对象引用推入scope.items,然后更改对象。导致更新其所有引用

以下是一些备选方案:

var scope = {};
scope.items = [];
var arr = [1,2,3,4,5];

//Passing an anonymous object
for( var i = 0, len = arr.length; i < len; i++){
    scope.items.push({name: arr[i]}); 
}

console.log(scope.items); ////[ { name: 1 }, { name: 2 }, { name: 3 }, { name: 4 }, { name: 5 } ]

function Item(value){
    this.value = value;
}

//Or with a defined object
scope.items2 = [];

for(var i =0, len =arr.length; i < len; i++){
    scope.items2.push(new Item(arr[i]));
}

console.log(scope.items2); //[ { value: 1 }, { value: 2 }, { value: 3 }, { value: 4 }, { value: 5 } ]

//Or to declare item inside of the for loop, so that it is reinitialized each time
scope.items3 = [];

for(var i =0, len = arr.length; i < len; i++){
    var item = { name: 'somevalue ' + i };
    scope.items3.push(item);
}

console.log(scope.items3); /*[ { name: 'somevalue 0' },
                             { name: 'somevalue 1' },
                             { name: 'somevalue 2' },
                             { name: 'somevalue 3' },
                             { name: 'somevalue 4' } ]*/
var scope={};
scope.items=[];
var-arr=[1,2,3,4,5];
//传递匿名对象
对于(变量i=0,len=arr.length;i
如前所述,您正在将对象引用推入scope.items,然后更改对象。导致更新其所有引用

以下是一些备选方案:

var scope = {};
scope.items = [];
var arr = [1,2,3,4,5];

//Passing an anonymous object
for( var i = 0, len = arr.length; i < len; i++){
    scope.items.push({name: arr[i]}); 
}

console.log(scope.items); ////[ { name: 1 }, { name: 2 }, { name: 3 }, { name: 4 }, { name: 5 } ]

function Item(value){
    this.value = value;
}

//Or with a defined object
scope.items2 = [];

for(var i =0, len =arr.length; i < len; i++){
    scope.items2.push(new Item(arr[i]));
}

console.log(scope.items2); //[ { value: 1 }, { value: 2 }, { value: 3 }, { value: 4 }, { value: 5 } ]

//Or to declare item inside of the for loop, so that it is reinitialized each time
scope.items3 = [];

for(var i =0, len = arr.length; i < len; i++){
    var item = { name: 'somevalue ' + i };
    scope.items3.push(item);
}

console.log(scope.items3); /*[ { name: 'somevalue 0' },
                             { name: 'somevalue 1' },
                             { name: 'somevalue 2' },
                             { name: 'somevalue 3' },
                             { name: 'somevalue 4' } ]*/
var范围