Aakankshi Gupta
Aakankshi Gupta

Reputation: 375

How we remove object from an Array based on another array in Angular 6

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

Answers (5)

Tushar Walzade
Tushar Walzade

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

Vu Luu
Vu Luu

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

Amit Chigadani
Amit Chigadani

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

Masoud Darvishian
Masoud Darvishian

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

zmag
zmag

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

Related Questions