I want to delete some item from my object :
clientData : {
1111 : [
{ID : 112, name : 'John',age : 23},
{ID : 113, name : 'Doe',age : 21},
{ID : 114, name : 'Stan',age : 24},
],
2222 : [
{ID : 222, name : 'Sara',age : 15},
{ID : 223, name : 'Wiliams',age : 61},
{ID : 224, name : 'Alan',age : 45},
],
}
The data that I want to delete is stored in an array of Id's like this :
[112,223,114]
So the output should look like this :
clientData : {
1111 : [
{ID : 113, name : 'Doe',age : 21},
],
2222 : [
{ID : 222, name : 'Sara',age : 15},
{ID : 224, name : 'Alan',age : 45},
],
}
Any help please how to achieve this ? I really have no idea how to do it, and don't found any solutions in internet.
CodePudding user response:
Loop through each object property and filter the array based on the delete ID's.
let deleteIds = [112,223,114];
for (const data in clientData) {
clientData[data] = clientData[data].filter(list=>!deleteIds.includes(list.ID));
}
console.log(clientData) // prints out your object
CodePudding user response:
I am assuming you are tying to filter out the original object. Hence, You can simply achieve it by using Array.forEach() method along with the Array.splice().
Live Demo :
const clientData = {
1111 : [
{ID : 112, name : 'John',age : 23},
{ID : 113, name : 'Doe',age : 21},
{ID : 114, name : 'Stan',age : 24},
],
2222 : [
{ID : 222, name : 'Sara',age : 15},
{ID : 223, name : 'Wiliams',age : 61},
{ID : 224, name : 'Alan',age : 45},
]
};
const invalidValues = [112, 223, 114];
Object.keys(clientData).forEach(key => {
clientData[key].forEach((obj, index) => {
if (invalidValues.includes(obj.ID)) {
clientData[key].splice(index, 1);
}
})
});
console.log(clientData);
CodePudding user response:
You could use Array.reduce()
along with Array.filter()
to delete the items from the client array.
I would suggest creating a Set
to contain the ids to be deleted. This will make lookup more efficient than using an array (using Set.has
)
const clientData = { 1111 : [ {ID : 112, name : 'John',age : 23}, {ID : 113, name : 'Doe',age : 21}, {ID : 114, name : 'Stan',age : 24}, ], 2222 : [ {ID : 222, name : 'Sara',age : 15}, {ID : 223, name : 'Wiliams',age : 61}, {ID : 224, name : 'Alan',age : 45}, ], }
const idsToDelete = new Set([112,223,114]);
const result = Object.keys(clientData).reduce((acc, key) => {
acc[key] = clientData[key].filter(({ID}) => !idsToDelete.has(ID));
return acc;
}, {});
console.log('Result:', result)
.as-console-wrapper { max-height: 100% !important; }
CodePudding user response:
You can loop your clientData object with for....in loop.
let clientData = {
1111 : [
{ID : 112, name : 'John',age : 23},
{ID : 113, name : 'Doe',age : 21},
{ID : 114, name : 'Stan',age : 24},
],
2222 : [
{ID : 222, name : 'Sara',age : 15},
{ID : 223, name : 'Wiliams',age : 61},
{ID : 224, name : 'Alan',age : 45},
],
};
const dataToDelete = [112, 223, 114];
for (const key in clientData) {
clientData[key].forEach((data,index) =>{
if (dataToDelete.includes(data.ID)){
clientData[key].splice(index,1)
}
})
}
console.log(clientData);