Reputation: 375
I have two arrays like this:
var skillArray = [
{ID: 1, name: "الغطس"},
{ID: 2, name: "الحريق"},
{ID: 3, name: "المعالجة"},
{ID: 4, name: "الميكانيكا"},
{ID: 5, name: "السيول"},
{ID: 6, name: "التغريز"},
{ID: 7, name: "الكهرباء"},
{ID: 8, name: "الاحتفالات"},
{ID: 9, name: "المناسبات"},
{ID: 10, name: "الصلاة"}
]
var splitstr = ["9", "7"]
As you can see, ID 9 & 7 match and I want to be able to remove them from skillArray. How would I write this?
Upvotes: 0
Views: 1754
Reputation: 3819
It can be achieved simply using includes
as follows -
var skillArray = [
{ID: 1, name: "الغطس"},
{ID: 2, name: "الحريق"},
{ID: 3, name: "المعالجة"},
{ID: 4, name: "الميكانيكا"},
{ID: 5, name: "السيول"},
{ID: 6, name: "التغريز"},
{ID: 7, name: "الكهرباء"},
{ID: 8, name: "الاحتفالات"},
{ID: 9, name: "المناسبات"},
{ID: 10, name: "الصلاة"}
]
var splitstr = ["9", "7"];
skillArray.forEach((obj, index) => {
if(splitstr.includes(obj['ID'].toString())) {
skillArray.splice(index, 1);
}
});
console.log(skillArray);
Note: toString()
is necessary to convert a number to a string if you want to compare a number with a string.
Upvotes: 2
Reputation: 790
var skillArray = [
{ID: 1, name: "الغطس"},
{ID: 2, name: "الحريق"},
{ID: 3, name: "المعالجة"},
{ID: 4, name: "الميكانيكا"},
{ID: 5, name: "السيول"},
{ID: 6, name: "التغريز"},
{ID: 7, name: "الكهرباء"},
{ID: 8, name: "الاحتفالات"},
{ID: 9, name: "المناسبات"},
{ID: 10, name: "الصلاة"}
]
var splitstr = ["9", "7"]
const removeSkills = (source, removeList) => {
return source.reduce((prev, curr) => {
if(!removeList.includes(curr.ID.toString()) ){
return prev.concat(curr)
}
return prev
}, [])
}
const result = removeSkills(skillArray, splitstr)
console.log(result)
Upvotes: 3
Reputation: 29785
If you want to modify the same array, then use splice.
And findIndex to get the index of a matching item to be removed.
var skillArray = [
{ID: 1, name: "الغطس"},
{ID: 2, name: "الحريق"},
{ID: 3, name: "المعالجة"},
{ID: 4, name: "الميكانيكا"},
{ID: 5, name: "السيول"},
{ID: 6, name: "التغريز"},
{ID: 7, name: "الكهرباء"},
{ID: 8, name: "الاحتفالات"},
{ID: 9, name: "المناسبات"},
{ID: 10, name: "الصلاة"}
]
var splitstr = ["9", "7"]
splitstr.forEach(item => {
const i = skillArray.findIndex(skill => skill.ID == item);
if(i > -1) {
skillArray.splice(i, 1)
}
})
console.log(skillArray);
Upvotes: 3
Reputation: 3964
Here is a working example :
var skillArray = [
{ID: 1, name: "الغطس"},
{ID: 2, name: "الحريق"},
{ID: 3, name: "المعالجة"},
{ID: 4, name: "الميكانيكا"},
{ID: 5, name: "السيول"},
{ID: 6, name: "التغريز"},
{ID: 7, name: "الكهرباء"},
{ID: 8, name: "الاحتفالات"},
{ID: 9, name: "المناسبات"},
{ID: 10, name: "الصلاة"}
]
var splitstr = ["9", "7"]
for (var i = 0; i < splitstr.length; i++) {
for (var j = 0; j < skillArray.length; j++) {
if (splitstr[i] == skillArray[j]['ID']) {
skillArray.splice(j, 1);
}
}
}
console.log(skillArray);
The splice
method can be used to add or remove elements from an array. The first argument specifies the location at which to begin adding or removing elements. The second argument specifies the number of elements to remove.
Upvotes: 3
Reputation: 8261
Use skillArray.filter()
for each element of splitstr
.
And you have to convert type to compare since splitstr
has elements as string.
var skillArray = [
{ID: 1, name: "الغطس"},
{ID: 2, name: "الحريق"},
{ID: 3, name: "المعالجة"},
{ID: 4, name: "الميكانيكا"},
{ID: 5, name: "السيول"},
{ID: 6, name: "التغريز"},
{ID: 7, name: "الكهرباء"},
{ID: 8, name: "الاحتفالات"},
{ID: 9, name: "المناسبات"},
{ID: 10, name: "الصلاة"}
]
var splitstr = ["9", "7"]
var arr = skillArray.filter(e => !splitstr.includes('' + e.ID))
console.log(arr)
Upvotes: 4