Reputation: 275
I have two arrays like so:
const data = [
{
createOn: "2021-02-06T18:03",
data: [
{id: "1612634593915", createOn: "2021-02-06T18:03:13.915"},
{id: "1612634622462", createOn: "2021-02-06T18:03:42.462"},
{id: "1612634584081", createOn: "2021-02-06T18:03:04.081"},
]
},
{
createOn: "2021-02-06T18:02",
data: [
{id: "1612634576145", createOn: "2021-02-06T18:02:56.145"},
{id: "1612634557111", createOn: "2021-02-06T18:02:37.110"}
]
}
]
const listId = ['1612634622462', '1612634557111'];
Then I try to remove object in array by id in listId
const remove = data.map(re => {
re.data.filter(item => {
return !listId.includes(item.id);
})
});
But when I log it out, I got [undefined, undefined]
.
I want array return like so after remove:
const data = [
{
createOn: "2021-02-06T18:03",
data: [
{id: "1612634593915", createOn: "2021-02-06T18:03:13.915"},
{id: "1612634584081", createOn: "2021-02-06T18:03:04.081"},
]
},
{
createOn: "2021-02-06T18:02",
data: [
{id: "1612634576145", createOn: "2021-02-06T18:02:56.145"}
]
}
]
Can you help me. Thank you :))
Upvotes: 2
Views: 561
Reputation: 1
Sure not the best solution, but I would loop through each data object and filter the data array for each listId Object. Just like this:
data.forEach(element => {
listId.forEach(removeId => {
element.data = element.data.filter(e.id => e.id !== removeId);
});
});
Upvotes: 0
Reputation: 68923
You should return the result from .map()
:
const data = [
{
createOn: "2021-02-06T18:03",
data: [
{id: "1612634593915", createOn: "2021-02-06T18:03:13.915"},
{id: "1612634622462", createOn: "2021-02-06T18:03:42.462"},
{id: "1612634584081", createOn: "2021-02-06T18:03:04.081"},
]
},
{
createOn: "2021-02-06T18:02",
data: [
{id: "1612634576145", createOn: "2021-02-06T18:02:56.145"},
{id: "1612634557111", createOn: "2021-02-06T18:02:37.110"}
]
}
]
const listId = ['1612634622462', '1612634557111'];
const remove = data.map(re => {
re.data = re.data.filter(item => {
return !listId.includes(item.id);
});
return re; // return here
});
console.log(remove);
Upvotes: 1
Reputation: 950
const data = [
{
createOn: "2021-02-06T18:03",
data: [
{id: "1612634593915", createOn: "2021-02-06T18:03:13.915"},
{id: "1612634622462", createOn: "2021-02-06T18:03:42.462"},
{id: "1612634584081", createOn: "2021-02-06T18:03:04.081"},
]
},
{
createOn: "2021-02-06T18:02",
data: [
{id: "1612634576145", createOn: "2021-02-06T18:02:56.145"},
{id: "1612634557111", createOn: "2021-02-06T18:02:37.110"}
]
}
]
const listId = ['1612634622462', '1612634557111'];
const newData = data.map(item => {
item.data = item.data.filter(item => !listId.includes(item.id))
return item
})
console.log(newData)
Upvotes: 2
Reputation: 2784
Your initial problem is that your inner map()
function doesn't doesn't return a value - for each object in the data
array. That's why is returned undefined
for both iterations.
Also - If you filter()
the array, you have to reassign it to itself to keep only filtered elements.
data.forEach(re => {
re.data = re.data.filter(item => {
return !listId.includes(item.id);
})
});
Upvotes: 0