【问题标题】:Unable store the objects into an array in javascript [duplicate]无法将对象存储到javascript中的数组中[重复]
【发布时间】:2019-10-18 21:31:19
【问题描述】:

我正在尝试将对象存储到 Javascript 数组中。

var res=[
    {name:'Alex',place:'US',age:20},
    {name:'Jason',place:'Canada',age:25}
  ];

var obj={};
var data=[];

for ( let i in res){
    obj.name=res[i].name;
    obj.place=res[i].place;
    data.push(obj);
 }

console.log(data);

我的预期输出:

[ 
  {name:'Alex',place:'US'}.
  {name:'Jason',place:'Canada'} 
]

我得到的实际输出:

[ 
  {name:'Jason',place:'Canada'},
  {name:'Jason',place:'Canada' }
]

为什么我会得到这种类型的输出? 我是菜鸟,请帮帮我。

【问题讨论】:

  • 另请参阅this answer,了解您可能不想使用for ( let i in res){ 的原因。

标签: javascript arrays object


【解决方案1】:

您的 var obj={}; 在内存中只有一个对象 - 该行运行一次,并在内存中创建 one 对象,然后您继续对每个对象进行变异在for 循环中迭代,然后推送到数组。最后,该数组包含对同一对象的 2 个引用。

改为在循环内创建对象:

for ( let i in res){
    var obj = {};
    obj.name=res[i].name;
    obj.place=res[i].place;
    data.push(obj);
}

您也可以考虑改用.map

const res=[
  {name:'Alex',place:'US',age:20},
  {name:'Jason',place:'Canada',age:25}
];
const data = res.map(({ name, place }) => ({ name, place }));
console.log(data);

【讨论】:

    【解决方案2】:

    您基本上是在循环中一次又一次地更新同一个对象。每个循环都需要有不同的对象。因此,您需要将 var obj={} 移动到 for 循环中。

    var res=[{name:'Alex',place:'US',age:20},{name:'Jason',place:'Canada',age:25}];
    
    
    var data=[];
    
    for ( let i in res){
        var obj={};
        obj.name=res[i].name;
        obj.place=res[i].place;
        data.push(obj);
    }
    
    console.log(data);

    【讨论】:

      【解决方案3】:

      使用 .map 会容易得多

          var res=[
              {name:'Alex',place:'US',age:20},
              {name:'Jason',place:'Canada',age:25}
            ];
          
          var obj={};
          var data = res.map(({ name, place }) => {
            return ({ name, place })
          });
          console.log(data);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-08
        • 2020-12-06
        • 1970-01-01
        • 1970-01-01
        • 2013-09-03
        • 2017-12-28
        • 2021-03-17
        • 1970-01-01
        相关资源
        最近更新 更多