javascript中的python dict.update()等价物

javascript中的python dict.update()等价物,javascript,dictionary,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];

我想用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]);
    }
它抛出一个错误,说未捕获的SyntaxError:Unexpected token new。我真的尝试了很多排列,请建议。非常感谢

  • 如果您使用的是
    Map
    实例,只需调用
    yourMap.set(key,newValue)
  • 如果您使用的是基本JavaScript对象,只需使用:
    • 点表示法
      yourObject.yourProperty=newValue
    • 方括号
      yourObject['your-property']=newValue
没有像Python那样的“批量”更新。这将取决于你如何构建你的数据以及你需要深入到多深的层次。

功能更新\u dic(a、b){
用于(输入b){
a[键]=b[键]
}
返回a;
}
变量a={1:45,4:56}
var b={1:56,6:67,67:67}
a=更新dic(a,b)
console.log(a)
您可以使用


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

const target={c:4,d:5}
常量源={a:1,b:2,c:3};
const newObj=Object.assign({},目标,源);

console.log(newObj);//=>{a:1,b:2,c:3,d:5}
Lodash
assign
函数应该会起作用。请参见

如何创建词典,能否上载部分代码?
new
是保留关键字。试着用另外一个词,比如
new\u dict
。你会重新考虑你接受的答案吗?;-)@user2715898您应该问另一个问题它也适用于对象!?令人惊叹的。这是正确的答案!这是ECMA6,但得到了广泛的支持:在Chrome70中,
Object.assign
比解构赋值快一个数量级以上。而在Firefox62中,它的速度快了近四倍。请参阅@CasualCoder3的答案。这应该是公认的答案!Python的等价物是
d1={**d2,**d3)
var obj1={'a':1,'b':6};var obj2={'b':2,'c':3};Object.assign(obj1,obj2);console.log(obj1)。如果没有返回,这将更正确(并删除最后一行中的
a=
。Python的dict.update执行就地更新,不返回值。在Chrome 70和Firefox 62中,
Object.assign
的速度最快。for in的速度第二快。最慢的速度是spread运算符(…)使用destructuring赋值。值得一提的是,
target
同时得到修改和返回,因此不需要像本例中那样使用
newObj
(该变量名具有误导性,因为它不是一个新对象,而只是
target
修改)。
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"
}
*/