有没有更新JS对象但保持以前字段不变的方法?

时间:2014-06-24 09:28:13

标签: javascript

我正在寻找与Mongo中的$set运算符类似的内容,并且无法在JS文档中找到它:

http://docs.mongodb.org/manual/reference/operator/update/set/

我想将字段的值替换为另一个指定的值。如果该字段不存在,我想添加具有指定值的字段。但是,如果对象中已有字段,我不想覆盖它们。

说我得到了这个:

var hashTable = { key1: "Original Stuff", key2: "More Stuff" }

我想将key2更新为其他内容,但仅限key2。我想单独留下key1。另外,我想添加一个key3。如果有类似的东西会很好:

var hashTable = hashTable.set( {key2: "Edited Stuff", key3: "Added stuff"} )
然后

hashTable将是

{ key1: "Original Stuff", key2: "Edited Stuff", key3: "Added Stuff" }

修改

想象一下,原始对象和我想用作更新参数的对象都有吨和吨的字段。我不会做hashTable.key2 = "Edited Stuff"

3 个答案:

答案 0 :(得分:1)

所以你正在寻找for..in statement,它允许你迭代对象的键。

所以在这种情况下,你可以轻松编写你的函数:

var setDict = function(target,extra){
    for(var property in extra){
         target[property]=extra[property];
    }
    return target;
}

Underscore.js还为此提供了一个函数(_.extend)。

用法:

var hashTable = { key1: "Original Stuff", key2: "More Stuff" }
hashTable = _.extend(hashTable,{key2: "Edited Stuff", key3: "Added stuff"} )
// hashTable == {key1: "Original Stuff", key2: "Edited Stuff", key3: "Added stuff"}

答案 1 :(得分:0)

只需按照自己的意愿行事:

var hashTable = { key1: "Original Stuff", key2: "More Stuff" }
hashTable.key2 = "Edited Stuff";
hashTable.key3 = "Added stuff";

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

答案 2 :(得分:0)

扩展Rudy的答案(我输入了类似的东西!)。

如果您需要动态获取密钥,您也可以使用对象['property']表示法。