Eu tenho uma série de objetos, conforme mostrado abaixo
Object {Results:Array[2]}
Results:Array[2]
[0-1]
0:Object
id=1
name: "Rick"
1:Object
id=2
name:'david'
Quero adicionar mais uma propriedade chamada Active para cada elemento dessa matriz de objetos.
O resultado final deve ser o seguinte.
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"
Alguém pode me dizer como conseguir isso.
javascript
arrays
object
underscore.js
Patrick
fonte
fonte
Respostas:
Você pode usar o
forEach
método para executar uma função fornecida uma vez para cada elemento da matriz. Nesta função fornecida, você pode adicionar aActive
propriedade ao elemento.Results.forEach(function (element) { element.Active = "false"; });
fonte
ou usar
map
Results.map(obj=> ({ ...obj, Active: 'false' }))
Editado para refletir o comentário de @adrianolsk para não alterar o original e, em vez disso, retornar um novo objeto para cada um.
Leia as especificações
fonte
Results.map(obj=> ({ ...obj, Active : 'false' }))
Object.defineProperty(Results, "Active", {value : 'true', writable : true, enumerable : true, configurable : true});
fonte
Também me deparei com esse problema e, ao tentar resolvê-lo, continuei travando a guia do Chrome que estava executando meu aplicativo. Parece que o operador de propagação de objetos foi o culpado.
Com uma pequena ajuda do comentário de adrianolsk e da resposta de Sidonaldson acima, usei Object.assign () a saída do operador de propagação de babel, assim:
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); });
fonte
Ele passa pelo objeto como uma estrutura de valor-chave. Em seguida, ele adicionará uma nova propriedade chamada 'Active' e um valor de amostra para esta propriedade ('Active) para cada objeto dentro deste objeto. este código pode ser aplicado para array de objetos e objeto de objetos.
Object.keys(Results).forEach(function (key){ Object.defineProperty(Results[key], "Active", { value: "the appropriate value"}); });
fonte
Com ES6 você pode simplesmente fazer:
for(const element of Results) { element.Active = "false"; }
fonte