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?
javascript
arrays
object
underscore.js
Patricio
fuente
fuente
Respuestas:
Puede utilizar el
forEach
método para ejecutar una función proporcionada una vez para cada elemento de la matriz. En esta función provista, puede agregar laActive
propiedad al elemento.Results.forEach(function (element) { element.Active = "false"; });
fuente
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
fuente
Results.map(obj=> ({ ...obj, Active : 'false' }))
Object.defineProperty(Results, "Active", {value : 'true', writable : true, enumerable : true, configurable : true});
fuente
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); });
fuente
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"}); });
fuente
Con ES6 simplemente puede hacer:
for(const element of Results) { element.Active = "false"; }
fuente