Tenemos una serie de objetos como este:
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 } ] Me gustaría crear una nueva matriz de objetos, basada en esta matriz, y agregar algunas propiedades nuevas, por lo que el map será la mejor manera.
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 } }) Me gustaría eliminar la propiedad de age del objeto, si status: true . ¿Cómo puedo hacerlo?
Extraiga la age con desestructuración y use una parte condicional para insertarla nuevamente:
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);Puede usar el operador de eliminación para eliminar una propiedad
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)Nota : como mencionó @trincot, esto eliminará el valor de edad del objeto original.
El camino largo pero con buen rendimiento.
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)