Agregar propiedad a una matriz de objetos


100

Tengo una matriz de objetos como se muestra a continuación

Object {Results:Array[2]}
     Results:Array[2]
[0-1]
0:Object
       id=1     
       name: "Rick"
1:Object
       id=2     
       name:'david'

Quiero agregar una propiedad más llamada Activa a cada elemento de esta matriz de Objetos.

El resultado final debería ser el siguiente.

Object {Results:Array[2]}
     Results:Array[2]
[0-1]
0:Object
       id=1     
       name: "Rick"
       Active: "false"
1:Object
       id=2     
       name:'david'
       Active: "false"

¿Alguien puede decirme cómo lograr esto?


6
Recorre la matriz. Agregue propiedades a cada elemento de la matriz mientras realiza un bucle. ¿Qué parte no sabes hacer?
JJJ

Respuestas:


147

Puede utilizar el forEachmétodo para ejecutar una función proporcionada una vez para cada elemento de la matriz. En esta función provista, puede agregar la Activepropiedad al elemento.

Results.forEach(function (element) {
  element.Active = "false";
});

201

o usar map

Results.map(obj=> ({ ...obj, Active: 'false' }))

Editado para reflejar el comentario de @adrianolsk para no mutar el original y, en cambio, devolver un nuevo objeto para cada uno.

Leer la especificación


4
solo se admite en ES6
Amaynut

5
ES5 para ser precisos;) - pero babel felizmente lo descompilará
sidonaldson

50
map debe devolver una nueva matriz, no mutar el objeto, en este caso forEach sería mejor, o usar map y devolver un nuevo objetoResults.map(obj=> ({ ...obj, Active : 'false' }))
adrianolsk

4
Gran solución @adrianolsk, debe enviarla como una respuesta separada.
Michael Hays


1

También me encontré con este problema, y ​​al tratar de resolverlo seguí bloqueando la pestaña de Chrome que estaba ejecutando mi aplicación. Parece que el culpable fue el operador de propagación de objetos .

Con un poco de ayuda del comentario de adrianolsk y la respuesta de sidonaldson anterior, usé Object.assign () la salida del operador de propagación de babel, así:

this.options.map(option => {
  // New properties to be added
  const newPropsObj = {
    newkey1:value1,
    newkey2:value2
  };

  // Assign new properties and return
  return Object.assign(option, newPropsObj);
});

0

Pasa por el objeto como una estructura de clave-valor. Luego agregará una nueva propiedad llamada 'Activo' y un valor de muestra para esta propiedad ('Activo) a cada objeto dentro de este objeto. este código se puede aplicar tanto para una matriz de objetos como para un objeto de objetos.

   Object.keys(Results).forEach(function (key){
            Object.defineProperty(Results[key], "Active", { value: "the appropriate value"});
        });

Sí, claro, pasa por el objeto como una estructura de clave-valor. Luego agregará una nueva propiedad llamada 'Activo' y un valor de muestra a cada objeto dentro de este objeto. este código se puede aplicar tanto para una matriz de objetos como para un objeto de objetos.
Arash MAS

0

Con ES6 simplemente puede hacer:

 for(const element of Results) {
      element.Active = "false";
 }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.