Comment puis-je ajouter une paire clé/valeur à un objet JavaScript?

Voici mon objet littéral:

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

comment ajouter {key3: value3} à l'objet?

1011
demandé sur T.J. Crowder 2009-07-23 03:21:51

22 réponses

il y a deux façons d'ajouter le nouveau propriétés à un objet:

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

utilisant la notation par points:

obj.key3 = "value3";

utilisant la notation à crochets:

obj["key3"] = "value3";

La première forme est utilisé lorsque vous connaissez le nom de la propriété. La deuxième forme est utilisée lorsque le nom de la propriété est déterminé dynamiquement. Comme dans cet exemple:

var getProperty = function (propertyName) {
    return obj[propertyName];
};

getProperty("key1");
getProperty("key2");
getProperty("key3");

A real le tableau JavaScript peut être construit en utilisant soit:

Le littéral de Tableau de notation:

var arr = [];

Du constructeur Array notation:

var arr = new Array();
1716
répondu Ionuț G. Stan 2011-11-08 16:36:31

Année 2017 réponse: Object.assign()

objet.attribuer(dest, src1, src2, ...) fusionne les objets.

Il écrase dest avec des propriétés et des valeurs de (cependant plusieurs) objets de source de, renvoie ensuite dest .

la méthode Object.assign() est utilisée pour copier les valeurs de toutes les propriétés propres dénombrables d'un ou plusieurs objets source vers un objet cible. Il de retour de l'objet cible.

Live exemple

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

document.body.innerHTML = JSON.stringify(obj);

année 2018 réponse: opérateur de propagation d'objet {...}

obj = {...obj, ...pair};

à Partir de MDN :

il copie ses propriétés énumérables d'un objet fourni sur un nouvel objet.

Clonage superficiel (à l'exclusion du prototype) ou la fusion d'objets est maintenant possible en utilisant une syntaxe plus courte que Object.assign() .

notez que Object.assign() déclenche setters alors que la syntaxe spread ne le fait pas.

Live exemple

il fonctionne dans le Chrome actuel et Firefox actuel. Ils disent que ça ne marche pas dans Current Edge.

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

document.body.innerHTML = JSON.stringify(obj);

année 2019 réponse

opérateur de cession D'objet += :

obj += {key3: "value3"};

Oops... Je suis emporté. La contrebande d'informations du futur est illégale. Dûment obscurci!

109
répondu 7vujy0f0hy 2017-12-30 20:31:56

j'ai pris goût au LoDash / Underscore en écrivant des projets plus grands.

en Ajoutant par obj['key'] ou obj.key sont solide en pur JavaScript réponses. Cependant, les deux bibliothèques LoDash et Underscore offrent de nombreuses fonctions supplémentaires pratiques lorsqu'elles travaillent avec des objets et des tableaux en général.

.push() est pour les Tableaux , pas pour objets .

selon ce que vous recherchez, il y a deux fonctions spécifiques qui peuvent être agréables à utiliser et donner des fonctionnalités similaires à la sensation de arr.push() . Pour plus d'informations, consultez les docs, ils ont quelques grands exemples.

_.fusionner (Lodash seulement)

le second objet écrira ou ajoutera à l'objet de base. Les valeurs undefined ne sont pas copiées.

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"} 

_.étendre._ / attribuer

le second objet écrira ou ajoutera à l'objet de base. undefined sera copié.

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}

_.par défaut

le second objet contient des valeurs par défaut qui seront ajoutées à l'objet de base s'il n'existe pas. Les valeurs undefined seront copiées si la clé existe déjà.

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"}

$.étendre

en outre, il peut être intéressant de mentionner jQuery.l'étendre, c'fonctions similaires à celles d' _.fusionner et peut être une meilleure option si vous utilisez déjà jQuery.

le second objet écrira ou ajoutera à l'objet de base. Les valeurs undefined ne sont pas copiées.

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"}

objet.attribuer()

il peut être il vaut la peine de mentionner L'objet ES6/ ES2015.céder, c'fonctions similaires à celles d' _.fusionner et peut être la meilleure option si vous utilisez déjà un polyfill ES6/ES2015 comme Babel si vous voulez polyfill vous-même .

le second objet écrira ou ajoutera à l'objet de base. undefined sera copié.

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}
78
répondu Sir.Nathan Stassen 2015-12-28 17:18:57

vous pouvez utiliser l'un ou l'autre de ceux-ci (à condition que key3 soit la clé active que vous voulez utiliser)

arr[ 'key3' ] = value3;

ou

arr.key3 = value3;

si key3 est une variable, alors vous devez faire:

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

après cela, demander arr.a_key retournerait la valeur de value3 , un littéral 3 .

64
répondu seth 2012-03-31 00:03:53
arr.key3 = value3;

parce que votre arr n'est pas vraiment un tableau... Il s'agit d'un prototype de l'objet. Le vrai tableau serait:

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

mais ce n'est toujours pas juste. Il devrait en fait être:

var arr = [{key: key1, value: value1}, {key: key2, value: value2}];
27
répondu Robert Koritnik 2009-07-22 23:25:33
var employees = []; 
employees.push({id:100,name:'Yashwant',age:30});
employees.push({id:200,name:'Mahesh',age:35});
23
répondu Vicky 2017-09-26 08:46:16

je sais qu'il y a déjà une réponse acceptée pour cela, mais j'ai pensé que je pourrais documenter mon idée quelque part. S'il vous plaît [les gens] n'hésitez pas à faire des trous dans cette idée, car je ne suis pas sûr que ce soit la meilleure solution... mais je viens de le faire il y a quelques minutes:

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

vous l'utiliseriez de cette façon:

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

depuis, la fonction prototype retourne this vous pouvez continuer à enchaîner .push 's à la fin de votre obj variable: obj.push(...).push(...).push(...);

une autre caractéristique est que vous pouvez passer un tableau ou un autre objet comme valeur dans les arguments de la fonction push. Voir mon violon pour un exemple de travail: http://jsfiddle.net/7tEme /

9
répondu sadmicrowave 2013-06-26 18:34:00

vous pouvez créer une classe avec la réponse de @Ionuț G. Stan

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

création d'un nouvel objet avec la dernière classe:

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

Imprimer l'objet

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

impression D'une clé

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

je suis débutant en javascript, les commentaires sont les bienvenus. Fonctionne pour moi.

8
répondu Eduen Sarceno 2017-05-23 11:47:29

Votre exemple montre un Objet, pas un Tableau. Dans ce cas, le moyen privilégié pour ajouter un champ à un Objet est simplement d'attribuer, comme:

arr.key3 = value3;
6
répondu bdukes 2009-07-22 23:25:57

deux voies les plus utilisées déjà mentionnées dans la plupart des réponses

obj.key3 = "value3";

obj["key3"] = "value3";

une autre façon de définir une propriété est D'utiliser 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
});

cette méthode est utile lorsque vous voulez avoir plus de contrôle tout en définissant la propriété. La propriété définie peut être définie comme énumérable, configurable et écrivable par l'utilisateur.

6
répondu Sanchay Kumar 2017-01-13 06:14:37

si vous avez plusieurs objets anonymes littéraux à l'intérieur d'un objet et que vous voulez ajouter un autre objet contenant des paires clé/valeur, faites ceci:

coupe-feu "L'objet:

console.log(Comicbook);

retourne:

[Object { nom="Spiderman", value="11"}, Objet { nom="Marsipulami", value="18"}, Objet { nom="Garfield", value="2"}]

Code:

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

ajoutera Object {name="Peanuts", value="12"} à L'objet Comicbook

5
répondu nottinhill 2012-08-01 14:28:41

Soit obj['key3'] = value3 ou obj.key3 = value3 ajoutera la nouvelle paire à la obj .

Cependant, je sais que jQuery n'a pas été mentionné, mais si vous l'utilisez, vous pouvez ajouter l'objet à travers $.extend(obj,{key3: 'value3'}) . Par exemple:

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

$.extend(obj,{key3: 'value3'});

$('#ext').append(JSON.stringify(obj));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="ini">Initial: </p>
<p id="ext">Extended: </p>

jQuery. étendre (cible[,objet1][,objectN]) fusionne le contenu de deux ou plusieurs objets ensemble dans la première objet.

et permet également des ajouts/modifications récursives avec $.extend(true,object1,object2); :

var object1 = {
  apple: 0,
  banana: { weight: 52, price: 100 },
  cherry: 97
};
var object2 = {
  banana: { price: 200 },
  durian: 100
};
$("#ini").append(JSON.stringify(object1));    

$.extend( true, object1, object2 );
 
$("#ext").append(JSON.stringify(object1));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="ini">Initial: </p>
<p id="ext">Extended: </p>
5
répondu Armfoot 2015-06-08 17:47:25

vous pouvez soit l'ajouter de cette façon:

arr['key3'] = value3;

ou par ici:

arr.key3 = value3;

les réponses suggérant de saisir l'objet avec la variable key3 ne fonctionneraient que si la valeur de key3 était 'key3' .

4
répondu wombleton 2009-07-22 23:33:35

selon accesseurs de propriété défini dans ECMA-262 ( http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf , P67), il y a deux façons d'ajouter des propriétés à un objet existant. Tout cela dans les deux sens, le moteur Javascript les traitera de la même manière.

La première façon est d'utiliser la notation point:

obj.key3 = value3;

Mais de cette façon, vous devez utiliser un IdentifierName après la notation par points.

la deuxième façon est d'utiliser la notation de support:

obj["key3"] = value3;

et une autre forme:

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

de cette façon, vous pouvez utiliser une Expression (incluez IdentifierName ) dans la notation entre crochets.

4
répondu Chen Yang 2013-08-02 03:51:40

une manière courte et élégante dans la prochaine spécification Javascript (étape candidate 3) est:

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

une discussion plus approfondie peut être trouvée dans objet étendu vs objet.assigner et sur Dr .Axel Rauschmayers site .

il fonctionne déjà dans le noeud.js depuis la version 8.6.0.

Vivaldi, Chrome, Opera, et Firefox dans des versions à jour connaître cette fonctionnalité aussi, mais Mirosoft ne le font pas jusqu'à aujourd'hui, ni dans Internet Explorer ni dans Edge.

3
répondu xyxyber 2017-12-04 19:00:55
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);
    });

sortie comme ceci: -

[ { 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 } ]
3
répondu Sayed Tauseef Haider Naqvi 2017-12-16 16:10:44

Nous pouvons le faire de cette manière.

var myMap = new Map();
myMap.set(0, 'my value1');
myMap.set(1, 'my value2');
 for (var [key, value] of myMap) {
  console.log(key + ' = ' + value);
 }
2
répondu Miraj Hamid 2017-09-07 03:36:55

puisque c'est une question du passé mais le problème du présent. Suggérerait une solution de plus: il suffit de passer la clé et les valeurs à la fonction et vous obtiendrez un objet map.

var map = {};
function addValueToMap(key, value) {
map[key] = map[key] || [];
map[key].push(value);
}
1
répondu PPing 2018-02-16 11:42:06

pour préparer une paire de valeur de clé à un objet de sorte que le pour dans fonctionne avec cet élément faire en premier:

    var nwrow = {'newkey': 'value' };
    for(var column in row){
        nwrow[column] = row[column];
    }
    row = nwrow;
0
répondu relipse 2016-12-08 22:24:04

le meilleur moyen d'y parvenir est indiqué ci-dessous:

function getKey(key) {
  return `${key}`;
}

var obj = {key1: "value1", key2: "value2", [getKey('key3')]: "value3"};

//console.log(obj);
0
répondu sgajera 2017-11-21 04:19:41

simplement ajouter des propriétés:

et nous voulons ajouter prop2 : 2 à cet objet, ce sont les options les plus commodes:

  1. opérateur point: object.prop2 = 2;
  2. crochets: object['prop2'] = 2;

alors lequel utilisons-nous?

de L'opérateur point est plus propre syntaxe et doit être utilisée comme valeur par défaut (omi). Cependant, l'opérateur dot n'est pas capable d'ajouter des touches dynamiques à un objet, ce qui peut être très utile dans certains cas. Voici un exemple:

const obj = {
  prop1: 1
}

const key = Math.random() > 0.5 ? 'key1' : 'key2';

obj[key] = 'this value has a dynamic key';

console.log(obj);

la Fusion des objets:

quand nous voulons fusionner les propriétés de 2 objets ce sont les options les plus commodes:

  1. Object.assign() , prend un objet cible comme argument, et un ou plusieurs objets source et les fusionne ainsi. Par exemple:

const object1 = {
  a: 1,
  b: 2,
};

const object2 = Object.assign({
  c: 3,
  d: 4
}, object1);

console.log(object2);
  1. Objet de la propagation de l'opérateur ...

const obj = {
  prop1: 1,
  prop2: 2
}

const newObj = {
  ...obj,
  prop3: 3,
  prop4: 4
}

console.log(newObj);

lequel utilisons-nous?

  • la syntaxe de propagation est moins verbeuse et doit être utilisée comme imo par défaut. N'oubliez pas de transposer cette syntaxe à la syntaxe qui est supportée par tous navigateurs, car il est relativement nouveau.
  • Object.assign() est plus dynamique parce que nous avons accès à tous les objets qui sont passés comme arguments et peuvent les manipuler avant qu'ils ne soient assignés au nouvel objet.
0
répondu Willem van der Veen 2018-08-23 20:01:57
arr.push({key3: value3});
-17
répondu dfa 2009-07-22 23:23:04