Engr.Aftab Ufaq
Engr.Aftab Ufaq

Reputation: 6374

How to Remove a specific items attributes from nested array of object in javascript

I have an array of objects like given in the example. I have done this in a single array but didn't know to do this in multiple dimensions arrays or nested arrays. read all these questions

How do I remove a property from a JavaScript object?

How can I remove a specific item from an array?

let array = [
{
   id:1,
   items:
      [
         {id: 1, name:"Aftab", rollno:"1", type:"student"},
         {id: 1, name:"Aftab", rollno:"1", type:"teacher"},
         {id: 1, name:"Aftab", rollno:"1", type:"student"},
      ]
},{
   id:2,
   items:
      [
         {id: 1, name:"Aftab", rollno:"1"},
         {id: 1, name:"Aftab", rollno:"1"},
         {id: 1, name:"Aftab", rollno:"1"},
      ]
},{
   id:3,
   items:
      [
         {id: 1, name:"Aftab", rollno:"1"},
         {id: 1, name:"Aftab", rollno:"1"},
         {id: 1, name:"Aftab", rollno:"1"},
      ]
},]

I want to change the rollno or remove it from items that have the type of teacher.

Upvotes: 0

Views: 199

Answers (2)

Inspiraller
Inspiraller

Reputation: 3806

let array = [
{
   id:1,
   items:
      [
         {id: 1, name:"Aftab", rollno:"1", type:"student"},
         {id: 1, name:"Aftab", rollno:"1", type:"teacher"},
         {id: 1, name:"Aftab", rollno:"1", type:"student"},
      ]
},{
   id:2,
   items:
      [
         {id: 1, name:"Aftab", rollno:"1"},
         {id: 1, name:"Aftab", rollno:"1"},
         {id: 1, name:"Aftab", rollno:"1"},
      ]
},{
   id:3,
   items:
      [
         {id: 1, name:"Aftab", rollno:"1"},
         {id: 1, name:"Aftab", rollno:"1"},
         {id: 1, name:"Aftab", rollno:"1"},
      ]
}]

const recurse = (arr, repl) => arr.map(item => 
  item.items instanceof Array 
    ? {
        items: recurse(item.items, repl)
      }
    : repl(item)
)
const updatedArray = recurse(array, (item) => (
  item.type !== 'teacher' ? item: {...item, rollno: 'updated whatever'}) 
);
console.log('updatedArray', updatedArray);

Upvotes: 1

Nitheesh
Nitheesh

Reputation: 20006

Changing the rollno when type is teacher.

let arrayData = [
    {
        id: 1,
        items:
            [
                { id: 1, name: "Aftab", rollno: "1", type: "student" },
                { id: 1, name: "Aftab", rollno: "1", type: "teacher" },
                { id: 1, name: "Aftab", rollno: "1", type: "student" },
            ]
    }, {
        id: 2,
        items:
            [
                { id: 1, name: "Aftab", rollno: "1" },
                { id: 1, name: "Aftab", rollno: "1" },
                { id: 1, name: "Aftab", rollno: "1" },
            ]
    }, {
        id: 3,
        items:
            [
                { id: 1, name: "Aftab", rollno: "1" },
                { id: 1, name: "Aftab", rollno: "1" },
                { id: 1, name: "Aftab", rollno: "1" },
            ]
    },
]

arrayData.forEach((node) => {
    node.items.forEach((item) => {
        if(item.type === 'teacher') {
            item.rollno = null;
        }
    })
});

console.log(arrayData)

Deleting the rollno when type is teacher.

let arrayData = [
    {
        id: 1,
        items:
            [
                { id: 1, name: "Aftab", rollno: "1", type: "student" },
                { id: 1, name: "Aftab", rollno: "1", type: "teacher" },
                { id: 1, name: "Aftab", rollno: "1", type: "student" },
            ]
    }, {
        id: 2,
        items:
            [
                { id: 1, name: "Aftab", rollno: "1" },
                { id: 1, name: "Aftab", rollno: "1" },
                { id: 1, name: "Aftab", rollno: "1" },
            ]
    }, {
        id: 3,
        items:
            [
                { id: 1, name: "Aftab", rollno: "1" },
                { id: 1, name: "Aftab", rollno: "1" },
                { id: 1, name: "Aftab", rollno: "1" },
            ]
    },
]

arrayData.forEach((node) => {
    node.items.forEach((item) => {
        if(item.type === 'teacher') {
            delete item.rollno;
        }
    })
});

console.log(arrayData)

Upvotes: 1

Related Questions