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.
-
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)'Sathyesh– Sathyesh2021年08月03日 06:35:38 +00:00Commented Aug 3, 2021 at 6:35
5 Answers 5
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)
1 Comment
return from the code.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
time, casesCount, recoverCount to the brackets {}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
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
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
Explore related questions
See similar questions with these tags.