这是代码
var arr = [1,2,3];
var entry = {};
var test = [];
for(var i=0;i<arr.length;i++){
entry.id = arr[i];
test.push(entry);
}
console.log(test);
Run Code Online (Sandbox Code Playgroud)
我想输出一个有三个不同对象的数组.但现在我的对象都是一样的,为什么?
[Object {id = 3},Object {id = 3},Object {id = 3}]
T.J*_*der 11
问题是您在所有循环迭代中重用相同的对象.在循环中创建一个新 entry对象:
var arr = [1,2,3];
var entry; // (modified, don't create here)
var test = [];
for(var i=0;i<arr.length;i++){
entry = {id: arr[i]}; // (modified, create new one here, with `id` prop)
test.push(entry);
}
console.log(test);
Run Code Online (Sandbox Code Playgroud)
否则,如果您只是entry.id在每个循环上分配,则只需更改id同一对象上的属性.将对象引用推送到数组时,您只需按下引用,而不是复制对象.
当然,entry如果你愿意,你可以完全取消变量,但你可能想要保持它的清晰度等等.这里没有:
var arr = [1,2,3];
var test = [];
for(var i=0;i<arr.length;i++){
test.push({id: arr[i]});
}
console.log(test);
Run Code Online (Sandbox Code Playgroud)
有些偏离主题:
创建对象并同时为其分配属性的结构称为对象文字.如果您有多个属性,则可以使用逗号分隔初始值设定项.例如:
var obj = {a: 1, b: 2, c: 3};
Run Code Online (Sandbox Code Playgroud)
是相同的
var obj = {};
obj.a = 1;
obj.b = 2;
obj.c = 3;
Run Code Online (Sandbox Code Playgroud)
值(表达的右侧:)可以是赋值语句中的表达式.名称(左侧:)是文字,如上所述,或字符串:
var obj = {"a": 1, 'b': 2, c: 3};
// ^^^ ^^^ ^---- literal is fine
// | +----------- string (with single quotes) also fine
// +------------------- string (with double quotes) also fine
Run Code Online (Sandbox Code Playgroud)
偏离主题的注意事项:如果在某些时候您发现自己使用JSON进行数据交换,则规则类似但限制性稍强(JSON是对象文字表示法的子集).具体来说,属性名称必须是双引号,并且所有字符串值(即使在右侧)也必须使用双引号.
| 归档时间: |
|
| 查看次数: |
4544 次 |
| 最近记录: |