0

I am getting list of objects as below,

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}
];

I want to store this in another output array.

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

Here, output I am getting only the last object only. {cases: 160380, recovered: 73, time: 1627794000000}

Here, where I am missing to fill the objects properly in output. Thanks in advance.

1
  • move output.push(outputElements) inside the loop as the last line. And when you are pushing it, use this sentence 'output.push(Object.assign({}, outputElements)' Commented Aug 3, 2021 at 6:35

5 Answers 5

2

What's wrong if you cloned the input array using the map method:

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)

Sign up to request clarification or add additional context in comments.

1 Comment

You can also use here destructing syntax for clean code. Additionally, you can remove return from the code.
1

You need to move outputElements = {}; and output.push(outputElements); inside 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);

1 Comment

in that case you can move time, casesCount, recoverCount to the brackets {}
0

I got it. Thanks for the comments also.

outputElements = {}; and output.push(outputElements); needs to be inside the for loop. Not outside.

corrected code as below:

output = [];    

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

2 Comments

You can actually accept your own answer as a solution if you want to
how nice, you made it exactly like mine... minus readability.
0

Here, output I am getting only the last object only. {cases: 160380, recovered: 73, time: 1627794000000}

That's because you are overwriting the outputElements object !

You will need to make the outputElements = {}; statement inside the forEach loop

input.forEach(function(inputElements){  

    outputElements = {};

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

    output.push(outputElements);
});

just as well as the push, before creating the new object to be fed into the array.

Comments

0

You're only getting the last object {cases: 160380, recovered: 73, time: 1627794000000} because you are overwriting all previous values of outputElements with the forEach loop before pushing to your output so you end up with only one value. You can use map instead of forEach

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

or you could just simply move output.push inside the forEach loop

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.