I am trying to iterate through an array of objects to create a new Object that fits my plan ahead better. Everything works fine until I put a if sentence in the map and I have no clue why?
const TestArray = [{
value: 0.2,
Time: '1980',
Region: 'Oklahoma',
RegionNumber: '1620',
validTo: 2017
},
{
value: 0.3,
Time: '1983',
Region: 'Oklahoma',
RegionNumber: '1620',
validTo: 2017
},
{
value: 0.2,
Time: '1986',
Region: 'Oklahoma',
RegionNumber: '1620',
validTo: 2017
},
{
value: 0.2,
Time: '1988',
Region: 'Oklahoma',
RegionNumber: '1620',
validTo: 2017
},
{
value: 0.2,
Time: '2018',
Region: 'Oklahoma',
RegionNumber: '1620',
validTo: 2017
}
]
console.log("This works fine:")
console.log(Object.fromEntries(TestArray.map((item) => [item["Time"], item["value"]])))
console.log("but when adding filter it crashes:")
console.log(Object.fromEntries(TestArray.map((item) => {
if (!(parseInt(item["validTo"]) > item["Time"])) {
[item["Time"], item["value"]]
}
})))
I am trying to iterate through an array of objects to create a new Object that fits my plan ahead better. Everything works fine until I put a if sentence in the map and I have no clue why?
const TestArray = [{
value: 0.2,
Time: '1980',
Region: 'Oklahoma',
RegionNumber: '1620',
validTo: 2017
},
{
value: 0.3,
Time: '1983',
Region: 'Oklahoma',
RegionNumber: '1620',
validTo: 2017
},
{
value: 0.2,
Time: '1986',
Region: 'Oklahoma',
RegionNumber: '1620',
validTo: 2017
},
{
value: 0.2,
Time: '1988',
Region: 'Oklahoma',
RegionNumber: '1620',
validTo: 2017
},
{
value: 0.2,
Time: '2018',
Region: 'Oklahoma',
RegionNumber: '1620',
validTo: 2017
}
]
console.log("This works fine:")
console.log(Object.fromEntries(TestArray.map((item) => [item["Time"], item["value"]])))
console.log("but when adding filter it crashes:")
console.log(Object.fromEntries(TestArray.map((item) => {
if (!(parseInt(item["validTo"]) > item["Time"])) {
[item["Time"], item["value"]]
}
})))
Share
Improve this question
edited Apr 20, 2022 at 1:08
Phil
165k25 gold badges259 silver badges267 bronze badges
asked Apr 20, 2022 at 1:05
matievamatieva
3852 gold badges5 silver badges15 bronze badges
3
|
2 Answers
Reset to default 18If anyone is ending up on this Question while working with the JavaScript Map
object like me:
const map = new Map(["a", 1], ["b", 2]); // Iterator value is not an entry object
const map = new Map([["a", 1], ["b", 2]]); // Correct, just forgot the []
Please find the corrected code below
Object.fromEntries(TestArray.map((item) => {
if (!(parseInt(item["validTo"]) > item["Time"])) {
return [item["Time"], item["value"]]
}
}).filter(item => item))
I have seen that you have already understood why your code did not work with the comments above.
.map()
callback. You should use.filter()
followed by.map()
if you want to remove elements and then map them. – Nick Parsons Commented Apr 20, 2022 at 1:08.map()
method won't ever remove elements, it will always return an array of the same length. So you must map each element fromTestArray
to another element by returning that from your callback. If you don't return anything, then you getundefined
(so you end up with[undefined, undefined, ...]
as the mapped array) that you then pass toObject.fromEntries()
. This method doesn't expect to seeundefined
, it instead expects to see a[key, value]
pair array, so your code crashes – Nick Parsons Commented Apr 20, 2022 at 1:23