'How to remove property from object

We have an array of objects like this:

const arrOfObjects = [
  {
    name: 'Ronaldo',
    age: 20,
    status: true
  },
  {
    name: 'Messi',
    age: 30,
    status: false
  },
  {
    name: 'Benzema',
    age: 40,
    status: false
  },  
  {
    name: 'Vini',
    age: 50,
    status: false
  }
]

I would like to create new array of objects, based on this array, and add some new properties - so the map will be the best way.

const newArray = arrayOfObjects.map(obj => {
    return {
    ...obj,
    newProperty: 'newProperty',
    age:  // Here I want to check if status property is true, if yes, I would like to remove property age from current object
  }
})

I would like to remove age property from object, if status: true. How can I do it?



Solution 1:[1]

Extract the age with destructuring and use a conditional part to insert it again:

const arrOfObjects = [{name: 'Ronaldo',age: 20,status: true},{name: 'Messi',age: 30,status: false},{name: 'Benzema',age: 40,status: false},{name: 'Vini',age: 50,status: false}];

const newArray = arrOfObjects.map(obj => {
    let {age, ...rest} = obj;
    return {
        ...rest,
        newProperty: 'newProperty',
        ...!obj.status && {age} 
    }
});

console.log(newArray);

Solution 2:[2]

You can use the delete operator to remove a property

const arrOfObjects = [
  {
    name: 'Ronaldo',
    age: 20,
    status: true
  },
  {
    name: 'Messi',
    age: 30,
    status: false
  },
  {
    name: 'Benzema',
    age: 40,
    status: false
  },  
  {
    name: 'Vini',
    age: 50,
    status: false
  }
]

const newArray = arrOfObjects.map(obj => {
  if(obj.status) delete obj.age
    return {
    ...obj,
    newProperty: 'newProperty',
  }
})

console.log(newArray)

Note : As @trincot mentionned, this will remove the age value from the original object.

Solution 3:[3]

The long way but with good performance.

 const arrOfObjects = [
  {
    name: 'Ronaldo',
    age: 20,
    status: true
  },
  {
    name: 'Messi',
    age: 30,
    status: false
  },
  {
    name: 'Benzema',
    age: 40,
    status: false
  },  
  {
    name: 'Vini',
    age: 50,
    status: false
  }
]

const n = []
arrOfObjects.forEach(a => {
  const tmp = {}
  tmp.newProperty = 'newProperty';
  tmp.name = a.name;
  tmp.status = a.status
  if (! a.status) {
    tmp.age = a.age
  }
  n.push(tmp);
})

console.log(n)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 trincot
Solution 2
Solution 3 Maik Lowrey