0

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?

5 Answers 5

4

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)

Sign up to request clarification or add additional context in comments.

Comments

3

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.

Comments

3

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);

Comments

3

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)

Comments

2

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.