web-dev-qa-db-fra.com

équivalent python dict.update () en javascript

Je souhaite mettre à jour le dictionnaire en javascript, modifier les valeurs existantes ou en ajouter de nouvelles, comme la mise à jour du dictionnaire python.

dict + ou dict.update () semblent ne pas fonctionner. Est-il possible de le faire en javascript?

Merci d'avance!

data={"abc":{1:2,3:4}}

if (key in d) {
            d[key].update(data[key]);
        }
        else {
            d[key]={};
            d[key]=data[key];
        }

EDIT: Le dictionnaire de mise à jour fonctionne bien comme suit

dg={"abc":{1:2,3:4},"sdc":{1:2,4:5}}
function upd(data) {
    for (key in data) {
        if (key in dg) {
            for (key2 in data[key]) {
                dg[key][key2]=data[key][key2];
            }
        }
        else {
            dg[key]={};
            for (key2 in data[key]) {
                dg[key][key2]=data[key][key2];
            }
        }

mais si j'essaie de séparer la fonction as- 

var old={};
var new={};
function update_dict(old,new) {
console.log(new,old);
    for (key2 in new) {
                old[key2]=new[key2];
            }
    return old;
}
function upd(data) {
for (key in data) {
    if (key in dg) {
        dg[key]=update_dict(dg[key],data[key]);
    }
    else {
        dg[key]={};
        dg[key]=update_dict(dg[key],data[key]);
    }

Il génère une erreur en disant Uncaught SyntaxError: Jeton inattendu nouveau . J'ai vraiment essayé beaucoup de permutations, suggérons s'il vous plaît. Merci beaucoup!

4
user2715898
  • Si vous utilisez une instance Map, appelez simplement yourMap.set(key, newValue).
  • Si vous utilisez un objet JavaScript de base, utilisez simplement:
    • Notation par points yourObject.yourProperty = newValue
    • Crochets yourObject['your-property'] = newValue

Il n'y a pas de mise à jour "en bloc" comme Python. Cela dépendra de la façon dont vous structurez vos données et de la profondeur à laquelle vous devez aller.

1
Daniel A. White

Vous pouvez utiliser l’affectation déstructuration .

const first_dict = { 'key_one': 'value_one', 'key_two': 'value_two' } 
const second_dict = { 'key_one': 'value_from_second_dict', 'key_three': 'value_three' }

const accumulative = {
  ...first_dict,
  ...second_dict
}

console.log(accumulative)

/* 
[object Object] {
  key_one: "value_from_second_dict",
  key_three: "value_three",
  key_two: "value_two"
}
*/
12
Jeffrey

Vous pouvez utiliser Object.assign() pour faire le travail. Il créera un nouvel objet avec toutes les clés mises à jour et ajoutera toutes les nouvelles paires de valeurs clé à l'objet nouvellement créé.

const target = {c: 4, d: 5}
const source = {a: 1, b: 2, c: 3};

const newObj = Object.assign(target, source);

console.log(newObj); //=> {a: 1, b: 2, c: 3, d: 5}

Vous pouvez même passer une séquence d'objets pour mettre à jour l'objet target, consultez le lien MDN pour plus d'informations.

4
CasualCoder3

function update_dic(a,b){
	for(key in b){
		a[key]     = b[key]
    }
	return a;
}
var  a = {1:45,4:56}
var b  = {1:56,6:67,67:67}
a = update_dic(a,b)
console.log(a)

3
Sudhakar Ayyar