在javascript中等效的python dict.update()

时间:2018-02-12 13:25:47

标签: javascript dictionary

我想在javascript中更新字典 - 修改现有值或添加新值 - 与python字典更新相同。

dict +或dict.update()似乎无法正常工作。是否有可能在javascript中这样做?

提前致谢!

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

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

编辑:更新字典工作正常如下 -

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];
            }
        }

但如果我尝试将功能分开为 -

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]);
    }

发出错误消息 Uncaught SyntaxError:Unexpected token new 。我真的尝试了很多排列,请建议。非常感谢!

5 个答案:

答案 0 :(得分:16)

您可以使用destructuring assignment

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

答案 1 :(得分:6)

您可以使用Object.assign()完成工作。它将创建一个更新了所有键的新对象,并将任何新的键值对添加到新创建的对象中。

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}

您甚至可以传入一系列对象来更新target对象,请查看MDN link了解更多信息

答案 2 :(得分:3)

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 :(得分:2)

  • 如果您使用的是Map个实例,请致电yourMap.set(key, newValue)
  • 如果您使用的是基本JavaScript对象,请使用以下任一方法:
    • 点符号yourObject.yourProperty = newValue
    • 方括号yourObject['your-property'] = newValue

没有"批量"像Python一样更新。这取决于您构建数据的方式以及您需要的深度。

答案 4 :(得分:0)

Lodash assign函数应该可以解决问题。参见https://lodash.com/docs/4.17.11#assign