本文介绍了如何在 JavaScript 中正确地将对象从 for 循环推送到数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

[{数据:'苹果',标签:'水果'},{数据:'香蕉',标签:'水果'},{ 数据:'芒果',标签:'水果' }]

所以我尝试了以下方法,但它无法正常工作.

var arr = [];对象 = {};var 水果 = ['香蕉','苹果','芒果'];var label = '水果';for (var i=0; i

结果只是推送相同的对象.

[{数据:'苹果',标签:'水果'},{数据:'苹果',标签:'水果'},{ 数据:'苹果',标签:'水果'}]

这是因为功能更近吗?我怎样才能做得好?

解决方案

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

循环内引用了同一个对象obj

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

for(var i = 0; i 

var arr = [];var 水果 = ['香蕉','苹果','芒果'];var label = '水果';for(var i = 0; i 

避免这种情况的一种简单方法是使用 Array#map 从旧数组创建新数组.

var arr = Fruits.map(fruit => ({数据:水果,标签:标签}));

var arr = [],水果 = ['香蕉','苹果','芒果'],label = '水果';var arr = Fruits.map(fruit => ({数据:水果,标签:标签}));console.log(arr);

I want to make an array that including object by for loop but there is a problem, The shape what I want is below :

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

So I tried to below way, but It's not working properly.

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

The result is just same object pushed.

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

Is this because of closer function ? How can I make it well?

解决方案

That's happening because the obj object is referencing to the same object and it is updated in each iteration.

The same object obj is referenced inside the loop

Move the object declaration inside the loop to create a new object in each iteration.

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


A simple way to avoid this is using Array#map to create new array from old.

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 中正确地将对象从 for 循环推送到数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-29 05:59
查看更多