Como posso adicionar um par chave / valor a um object JavaScript?

Aqui está o meu literal de object:

var obj = {key1: value1, key2: value2}; 

Como posso adicionar {key3: value3} ao object?

    Existem duas maneiras de adicionar novas propriedades a um object:

     var obj = { key1: value1, key2: value2 }; 

    Usando notação de ponto:

     obj.key3 = "value3"; 

    Usando a notação de colchetes:

     obj["key3"] = "value3"; 

    O primeiro formulário é usado quando você sabe o nome da propriedade. O segundo formulário é usado quando o nome da propriedade é determinado dinamicamente. Como neste exemplo:

     var getProperty = function (propertyName) { return obj[propertyName]; }; getProperty("key1"); getProperty("key2"); getProperty("key3"); 

    Um array JavaScript real pode ser construído usando:

    A notação literal da matriz:

     var arr = []; 

    A notação do construtor Array:

     var arr = new Array(); 

    Ano de 2017 resposta: Object.assign()

    Object.assign (dest, src1, src2, …) mescla objects.

    Sobrescreve dest com propriedades e valores de (no entanto muitos) objects de origem, depois retorna dest .

    O método Object.assign() é usado para copiar os valores de todas as propriedades próprias enumeráveis ​​de um ou mais objects de origem para um object de destino. Ele retornará o object de destino.

    Exemplo ao vivo

     var obj = {key1: "value1", key2: "value2"}; Object.assign(obj, {key3: "value3"}); document.body.innerHTML = JSON.stringify(obj); 

    Eu gostei muito do LoDash / Underscore ao escrever projetos maiores.

    Adicionar por obj['key'] ou obj.key são todas respostas sólidas de JavaScript puro. No entanto, as bibliotecas LoDash e Underscore oferecem muitas funções convenientes ao trabalhar com objects e matrizes em geral.

    .push() é para matrizes , não para objects .

    Dependendo do que você está procurando, existem duas funções específicas que podem ser arr.push() para utilizar e dar funcionalidade semelhante à sensação de arr.push() . Para mais informações, consulte os documentos, eles têm ótimos exemplos.

    _.merge (somente Lodash)

    O segundo object irá sobrescrever ou adicionar ao object base. valores undefined não são copiados.

     var obj = {key1: "value1", key2: "value2"}; var obj2 = {key2:"value4", key3: "value3", key4: undefined}; _.merge(obj, obj2); console.log(obj); // → {key1: "value1", key2: "value4", key3: "value3"} 

    _.extend / _.assign

    O segundo object irá sobrescrever ou adicionar ao object base. undefined será copiado.

     var obj = {key1: "value1", key2: "value2"}; var obj2 = {key2:"value4", key3: "value3", key4: undefined}; _.extend(obj, obj2); console.log(obj); // → {key1: "value1", key2: "value4", key3: "value3", key4: undefined} 

    _defaults

    O segundo object contém padrões que serão adicionados ao object base se eles não existirem. valores undefined serão copiados se a chave já existir.

     var obj = {key3: "value3", key5: "value5"}; var obj2 = {key1: "value1", key2:"value2", key3: "valueDefault", key4: "valueDefault", key5: undefined}; _.defaults(obj, obj2); console.log(obj); // → {key3: "value3", key5: "value5", key1: "value1", key2: "value2", key4: "valueDefault"} 

    $ .extend

    Além disso, pode valer a pena mencionar o jQuery.extend, que funciona como o _.merge e pode ser uma opção melhor se você já estiver usando o jQuery.

    O segundo object irá sobrescrever ou adicionar ao object base. valores undefined não são copiados.

     var obj = {key1: "value1", key2: "value2"}; var obj2 = {key2:"value4", key3: "value3", key4: undefined}; $.extend(obj, obj2); console.log(obj); // → {key1: "value1", key2: "value4", key3: "value3"} 

    Object.assign ()

    Pode valer a pena mencionar o ES6 / ES2015 Object.assign, ele funciona de forma semelhante ao _.merge e pode ser a melhor opção se você já estiver usando um polyfill ES6 / ES2015 como o Babel, se você quiser polyfill você mesmo .

    O segundo object irá sobrescrever ou adicionar ao object base. undefined será copiado.

     var obj = {key1: "value1", key2: "value2"}; var obj2 = {key2:"value4", key3: "value3", key4: undefined}; Object.assign(obj, obj2); console.log(obj); // → {key1: "value1", key2: "value4", key3: "value3", key4: undefined} 

    Você poderia usar qualquer um desses (desde que key3 seja a chave real que você deseja usar)

     arr[ 'key3' ] = value3; 

    ou

     arr.key3 = value3; 

    Se key3 é uma variável, então você deve fazer:

     var key3 = 'a_key'; var value3 = 3; arr[ key3 ] = value3; 

    Depois disso, solicitando arr.a_key retornaria o valor de value3 , um literal 3 .

     arr.key3 = value3; 

    porque o seu arr não é realmente uma matriz … É um object de protótipo. O array real seria:

     var arr = [{key1: value1}, {key2: value2}]; 

    mas ainda não está certo. Na verdade, deve ser:

     var arr = [{key: key1, value: value1}, {key: key2, value: value2}]; 
     var employees = []; employees.push({id:100,name:'Yashwant',age:30}); employees.push({id:200,name:'Mahesh',age:35}); 

    Eu sei que já existe uma resposta aceita para isso, mas pensei em documentar minha ideia em algum lugar. Por favor, [as pessoas] sinta-se à vontade para fazer furos nesta ideia, pois não tenho certeza se é a melhor solução … mas eu juntei isso há alguns minutos:

     Object.prototype.push = function( key, value ){ this[ key ] = value; return this; } 

    Você poderia utilizá-lo desta maneira:

     var obj = {key1: value1, key2: value2}; obj.push( "key3", "value3" ); 

    Como a function de protótipo está retornando, você pode continuar a encadear .push até o final da sua variável obj : obj.push(...).push(...).push(...);

    Outra característica é que você pode passar uma matriz ou outro object como o valor nos argumentos da function de envio. Veja meu violino para um exemplo prático : http://jsfiddle.net/7tEme/

    Você pode criar uma class com a resposta de @ Ionuț G. Stan

     function obj(){ obj=new Object(); this.add=function(key,value){ obj[""+key+""]=value; } this.obj=obj } 

    Criando um novo object com a última class:

     my_obj=new obj(); my_obj.add('key1', 'value1'); my_obj.add('key2', 'value2'); my_obj.add('key3','value3'); 

    Imprimindo o object

     console.log(my_obj.obj) // Return {key1: "value1", key2: "value2", key3: "value3"} 

    Imprimir uma chave

     console.log(my_obj.obj["key3"]) //Return value3 

    Sou novato em javascript, comentários são bem vindos. Funciona para mim.

    Seu exemplo mostra um object, não uma matriz. Nesse caso, a maneira preferida de adicionar um campo a um Objeto é apenas atribuí-lo, assim:

     arr.key3 = value3; 

    Duas formas mais usadas já mencionadas na maioria das respostas

     obj.key3 = "value3"; obj["key3"] = "value3"; 

    Mais uma maneira de definir uma propriedade é usando Object.defineProperty ()

     Object.defineProperty(obj, 'key3', { value: "value3", // undefined by default enumerable: true, // false by default configurable: true, // false by default writable: true // false by default }); 

    Esse método é útil quando você deseja ter mais controle ao definir a propriedade. A propriedade definida pode ser definida como enumerável, configurável e gravável pelo usuário.

    Caso você tenha vários literais de object anônimos dentro de um object e queira adicionar outro object contendo pares de chave / valor, faça o seguinte:

    Firebug ‘o object:

     console.log(Comicbook); 

    retorna:

    [Object {nome = “Homem Aranha”, valor = “11”}, Objeto {name = “Marsipulami”, valor = “18”}, Objeto {name = “Garfield”, valor = “2”}]

    Código:

     if (typeof Comicbook[3]=='undefined') { private_formArray[3] = new Object(); private_formArray[3]["name"] = "Peanuts"; private_formArray[3]["value"] = "12"; } 

    irá adicionar Object {name="Peanuts", value="12"} ao object Comicbook

    obj['key3'] = value3 ou obj.key3 = value3 adicionará o novo par ao obj .

    No entanto, eu sei que jQuery não foi mencionado, mas se você estiver usando, você pode adicionar o object através de $.extend(obj,{key3: 'value3'}) . Por exemplo:

     var obj = {key1: 'value1', key2: 'value2'}; $('#ini').append(JSON.stringify(obj)); $.extend(obj,{key3: 'value3'}); $('#ext').append(JSON.stringify(obj)); 
      

    Initial:

    Extended:

    Você pode adicioná-lo desta maneira:

     arr['key3'] = value3; 

    ou assim:

     arr.key3 = value3; 

    As respostas sugerindo digitar no object com a variável key3 só funcionariam se o valor de key3 fosse 'key3' .

    De acordo com os Property Accessors definidos na ECMA-262 ( http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf , P67), existem duas maneiras de adicionar propriedades a um object existe. Todos estes dois sentidos, o motor Javascript irá tratá-los da mesma forma.

    A primeira maneira é usar a notação de ponto:

     obj.key3 = value3; 

    Mas desta forma, você deve usar um IdentifierName após a notação de ponto.

    A segunda maneira é usar a notação de colchetes:

     obj["key3"] = value3; 

    e outra forma:

     var key3 = "key3"; obj[key3] = value3; 

    Dessa forma, você poderia usar uma expressão (include IdentifierName ) na notação de colchetes.

    Uma maneira curta e elegante na próxima especificação Javascript (estágio candidato 3) é:

    obj = { ... obj, ... { key3 : value3 } }

    Uma discussão mais profunda pode ser encontrada em Object spread vs Object.assign e no site do Dr. Axel Rauschmayers .

    Ele já funciona em node.js desde o release 8.6.0.

    Vivaldi, Chrome, Opera e Firefox em versões atuais também conhecem esse recurso, mas a Mirosoft não o faz até hoje, nem no Internet Explorer nem no Edge.

     var arrOfObj = [{name: 'eve'},{name:'john'},{name:'jane'}]; var injectObj = {isActive:true, timestamp:new Date()}; // function to inject key values in all object of json array function injectKeyValueInArray (array, keyValues){ return new Promise((resolve, reject) => { if (!array.length) return resolve(array); array.forEach((object) => { for (let key in keyValues) { object[key] = keyValues[key] } }); resolve(array); }) }; //call function to inject json key value in all array object injectKeyValueInArray(arrOfObj,injectObj).then((newArrOfObj)=>{ console.log(newArrOfObj); }); 

    Saída como esta: –

     [ { name: 'eve', isActive: true, timestamp: 2017-12-16T16:03:53.083Z }, { name: 'john', isActive: true, timestamp: 2017-12-16T16:03:53.083Z }, { name: 'jane', isActive: true, timestamp: 2017-12-16T16:03:53.083Z } ] 

    Nós podemos fazer isso também.

     var myMap = new Map(); myMap.set(0, 'my value1'); myMap.set(1, 'my value2'); for (var [key, value] of myMap) { console.log(key + ' = ' + value); } 

    Desde que é uma questão do passado, mas o problema do presente. Gostaria de sugerir mais uma solução: Basta passar a chave e os valores para a function e você receberá um object de mapa.

     var map = {}; function addValueToMap(key, value) { map[key] = map[key] || []; map[key].push(value); } 

    Para prefixar um par de valores-chave em um object, faça o seguinte para for in com esse elemento:

      var nwrow = {'newkey': 'value' }; for(var column in row){ nwrow[column] = row[column]; } row = nwrow; 

    A melhor maneira de conseguir o mesmo é indicada abaixo:

     function getKey(key) { return `${key}`; } var obj = {key1: "value1", key2: "value2", [getKey('key3')]: "value3"}; //console.log(obj); 

    Basta adicionar propriedades:

    E nós queremos adicionar prop2 : 2 a este object, estas são as opções mais convenientes:

    1. Operador de pontos: object.prop2 = 2;
    2. colchetes: object['prop2'] = 2;

    Então, qual deles usamos então?

    O operador ponto é uma syntax mais limpa e deve ser usado como padrão (imo). No entanto, o operador ponto não é capaz de adicionar chaves dinâmicas a um object, o que pode ser muito útil em alguns casos. Aqui está um exemplo:

     const obj = { prop1: 1 } const key = Math.random() > 0.5 ? 'key1' : 'key2'; obj[key] = 'this value has a dynamic key'; console.log(obj); 
     arr.push({key3: value3});