【问题标题】:How to push list of objects into array in Javascript如何在Javascript中将对象列表推送到数组中
【发布时间】:2021-08-03 06:30:50
【问题描述】:

我得到的对象列表如下,

const input = [
  {cases: 162151, recovered: 68, time: 1627362000000},
  {cases: 159569, recovered: 39, time: 1627448400000},
  {cases: 150654, recovered: 97, time: 1627534800000},
  {cases: 140750, recovered: 98, time: 1627621200000},
  {cases: 163394, recovered: 69, time: 1627707600000},
  {cases: 160380, recovered: 73, time: 1627794000000}
];

我想将它存储在另一个输出数组中。

let output = [];
let outputElements = {};
    
input.forEach(function(inputElements){    
    outputElements.Time = inputElements.time;
    outputElements.casesCount= inputElements.cases;
    outputElements.recoverCount = inputElements.recovered;    
});
    
output.push(outputElements);

在这里,输出我只得到最后一个对象。 {病例:160380,治愈:73,时间:1627794000000}

在这里,我缺少在输出中正确填充对象的地方。 提前致谢。

【问题讨论】:

  • 将循环内的 output.push(outputElements) 作为最后一行移动。而当你推它的时候,使用这句话'output.push(Object.assign({}, outputElements)'

标签: javascript arrays javascript-objects


【解决方案1】:

如果您使用 ma​​p 方法克隆输入数组会出现什么问题:

var input = [
  {cases: 162151, recovered: 68, time: 1627362000000},
  {cases: 159569, recovered: 39, time: 1627448400000},
  {cases: 150654, recovered: 97, time: 1627534800000},
  {cases: 140750, recovered: 98, time: 1627621200000},
  {cases: 163394, recovered: 69, time: 1627707600000},
  {cases: 160380, recovered: 73, time: 1627794000000}
];


var output = input.map(({ 
  time: Time, 
  cases: casesCount, 
  recovered: recoverCount
}) => ({Time, casesCount, recoverCount}));


console.log(output)

【讨论】:

  • 你也可以在这里使用破坏语法来获得干净的代码。此外,您可以从代码中删除return
【解决方案2】:

您需要将outputElements = {};output.push(outputElements); 移动到forEach

const input = [
  { cases: 162151, recovered: 68, time: 1627362000000 },
  { cases: 159569, recovered: 39, time: 1627448400000 },
  { cases: 150654, recovered: 97, time: 1627534800000 },
  { cases: 140750, recovered: 98, time: 1627621200000 },
  { cases: 163394, recovered: 69, time: 1627707600000 },
  { cases: 160380, recovered: 73, time: 1627794000000 }
];

let output = [];

input.forEach(({ time: Time, cases: casesCount, recovered: recoverCount }) =>
  output.push({ Time, casesCount, recoverCount })
);

console.log(output);

【讨论】:

  • 在这种情况下,您可以将time, casesCount, recoverCount 移动到括号{}
  • 是的,你可以而且很可能应该这样做,谢谢队友 :)
【解决方案3】:

我明白了。也感谢 cmets。

outputElements = {}; and output.push(outputElements); 需要在 for 循环内。不在外面。

修正代码如下:

output = [];    

input.forEach(function(inputElements){
    outputElements = {};
    outputElements.Time = inputElements.time;
    outputElements.casesCount= inputElements.cases;
    outputElements.recoverCount = inputElements.recovered; 
    output.push(outputElements);   
});

【讨论】:

  • 如果您愿意,您实际上可以接受自己的答案作为解决方案
  • 太好了,你做的和我的一模一样...减去可读性。
【解决方案4】:

在这里,输出我只得到最后一个对象。 {病例:160380,治愈:73,时间:1627794000000}

那是因为您正在覆盖 outputElements 对象!

您需要在forEach 循环内创建outputElements = {}; 语句

input.forEach(function(inputElements){  

    outputElements = {};

    outputElements.Time = inputElements.time;
    outputElements.casesCount= inputElements.cases;
    outputElements.recoverCount = inputElements.recovered;

    output.push(outputElements);
});

就像push 一样,在创建要输入数组的新对象之前。

【讨论】:

    【解决方案5】:

    你只得到最后一个对象 {cases: 160380, recovery: 73, time: 1627794000000} 因为你在推送到输出之前用 forEach 循环覆盖了 outputElements 的所有先前值,所以你最终只有一个值.您可以使用 map 代替 forEach

    output = input.map(inputElements => {
      const outputElements = {};
      outputElements.Time = inputElements.time;
      outputElements.casesCount = inputElements.cases;
      outputElements.recoverCount = inputElements.recovered;
      return outputElements;
    });
    

    或者你可以简单地将 output.push 移动到 forEach 循环中

    input.forEach(function (inputElements) {
      const outputElements = {};
      outputElements.Time = inputElements.time;
      outputElements.casesCount = inputElements.cases;
      outputElements.recoverCount = inputElements.recovered;
      output.push(outputElements);
    });
    

    【讨论】:

      猜你喜欢
      • 2020-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 2021-10-28
      相关资源
      最近更新 更多