I have one nested array. I need to find and remove from inner array values.
mainArray = [
{
name:"name1",
idArray:["1", "2", "3"]
}
{
name:"name1",
idArray:["1", "2", "3", "5", "2"]
}
{
name:"name1",
idArray:["1", "2", "3", "4"]
}
]
I need a answer like below:
mainArray = [
{
name:"name1",
idArray:["1", "3"]
}
{
name:"name1",
idArray:["1", "3", "5"]
}
{
name:"name1",
idArray:["1", "3", "4"]
}
]
That mean I want remove values from idArray which is id as "2". Can you give me a answer from lodas, it's more comfort.
You can map
to loop thru the array. Clone each element and use filter
the idArray
let mainArray = [{
name: "name1",
idArray: ["1", "2", "3"]
},
{
name: "name1",
idArray: ["1", "2", "3", "5", "2"]
},
{
name: "name1",
idArray: ["1", "2", "3", "4"]
}
];
let toRemove = '2';
let result = mainArray.map(o => {
o = Object.assign({}, o); //To clone the obj. Will not affect the original array
o.idArray = o.idArray.filter(v => v !== toRemove);
return o;
});
console.log(result);
Add reduce
to remove the empty idArray
let mainArray = [{
name: "name1",
idArray: ["1", "2", "3"]
},
{
name: "name1",
idArray: ["1", "2", "3", "5", "2"]
},
{
name: "name-removed",
idArray: ["2"]
},
{
name: "name1",
idArray: ["1", "2", "3", "4"]
},
{
name: "name-removed",
idArray: []
}
];
let toRemove = '2';
let result = mainArray.reduce((c, o) => {
o = Object.assign({}, o);
o.idArray = o.idArray.filter(v => v !== toRemove);
if (o.idArray.length) c.push(o);
return c;
}, []);
console.log(result);