gpt4 book ai didi

javascript - 将对象插入数组时出现问题

转载 作者:行者123 更新时间:2023-11-30 07:03:11 24 4
gpt4 key购买 nike

这是代码

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);

我想输出一个包含三个不同对象的数组。但是现在我的对象都是一样的,为什么?

[对象{id=3},对象{id=3},对象{id=3}]

最佳答案

问题是您在所有循环迭代中重复使用同一个对象。在循环中创建一个 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);

否则,如果您只是在每个循环中分配给 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);

有点跑题:

创建对象并同时为其分配属性的结构称为对象字面量。如果你有多个属性,你会用逗号分隔它们的初始值设定项。例如:

var obj = {a: 1, b: 2, c: 3};

相同
var obj = {};
obj.a = 1;
obj.b = 2;
obj.c = 3;

值(: 的右侧)可以是表达式,就像在赋值语句中一样。名称(: 的左侧)可以是文字,如上所示,也可以是字符串:

var obj = {"a": 1, 'b': 2, c: 3};
// ^^^ ^^^ ^---- literal is fine
// | +----------- string (with single quotes) also fine
// +------------------- string (with double quotes) also fine

题外话:如果在某个时候你发现自己在使用 JSON对于数据交换,规则相似但限制稍微多一些(JSON 是对象文字表示法的一个子集)。具体来说,属性名称必须引号括起来,所有字符串值(即使在右侧)也必须用双引号括起来。

关于javascript - 将对象插入数组时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6546748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com