gpt4 book ai didi

javascript - 如何在 JavaScript 中正确地将对象从 for 循环推送到数组?

转载 作者:行者123 更新时间:2023-12-03 08:30:18 25 4
gpt4 key购买 nike

我想通过for循环创建一个包含对象的数组,但是有一个问题,我想要的形状如下:

[ 
{ data: 'apple', label: 'Fruits' },
{ data: 'banana', label: 'Fruits' },
{ data: 'mango', label: 'Fruits' }
]

所以我尝试了以下方式,但它无法正常工作。
var arr = [];
obj = {};
var fruits = ['banana', 'apple', 'mango'];
var label = 'Fruits';

for (var i=0; i<fruits.length; i++){
obj['data'] = fruits[i];
obj['label'] = label;
arr.push(obj);
}

console.log(arr);

结果只是推送了同一个对象。
[
{ data: 'apple', label: 'Fruits' },
{ data: 'apple', label: 'Fruits' },
{ data: 'apple', label: 'Fruits' }
]

这是因为更紧密的功能吗?我怎样才能使它好起来?

最佳答案

发生这种情况是因为 obj object 引用的是同一个对象,并且在每次迭代中都会更新。

同一个对象obj在循环内被引用

在循环内移动对象声明以在每次迭代中创建一个新对象。

for(var i = 0; i < fruits.length; i++) {
var obj = {}; // <---- Move declaration inside loop

obj['data'] = fruits[i];
obj['label'] = label;
arr.push(obj);
}

var arr = [];
var fruits = ['banana', 'apple', 'mango'];
var label = 'Fruits';

for(var i = 0; i < fruits.length; i++) {
var obj = {};
obj['data'] = fruits[i];
obj['label'] = label;
arr.push(obj);
}

console.log(arr);



避免这种情况的一个简单方法是使用 Array#map 从旧数组创建新数组。
var arr = fruits.map(fruit => ({
data: fruit,
label: label
}));

var arr = [],
fruits = ['banana', 'apple', 'mango'],
label = 'Fruits';

var arr = fruits.map(fruit => ({
data: fruit,
label: label
}));
console.log(arr);

关于javascript - 如何在 JavaScript 中正确地将对象从 for 循环推送到数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36602160/

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