js中循环后的数组,追加给对象,为什么拿到的都是最后一次数据
时间: 2024-02-20 08:56:50 浏览: 193
如果你在循环中动态追加数组元素到对象属性中,而每次循环追加的元素都是一个引用类型(例如数组或对象),那么最后你拿到的对象属性中存储的引用类型都是最后一次追加的元素的引用,这是因为 JavaScript 中引用类型是按引用传递的,而不是按值传递的。因此,如果你在循环中多次追加同一个引用类型,那么最后对象属性中存储的引用都是同一个,即最后一次追加的引用。
为了避免这种情况,你可以在每次循环中创建一个新的引用类型对象,然后将它追加到对象属性中。这样,每个对象属性存储的引用类型对象都是独立的,不会相互影响。例如:
```javascript
const obj = {
hobbies: []
};
const arr = ['swimming', 'reading', 'travelling'];
for (const value of arr) {
const hobby = { name: value }; // 创建一个新的引用类型对象
obj.hobbies.push(hobby);
}
console.log(obj.hobbies);
// [
// { name: 'swimming' },
// { name: 'reading' },
// { name: 'travelling' }
// ]
```
在上述代码中,我们在每次循环中都创建一个新的对象 `hobby`,它包含一个属性 `name`,值为当前循环迭代的元素值。然后我们将这个新对象追加到 `obj.hobbies` 数组中。这样,`obj.hobbies` 数组中存储的每个对象都是独立的,它们的 `name` 属性值分别为数组元素的值。
阅读全文