有没有"本地人"修改对象属性的Javascript函数

时间:2016-09-27 17:17:44

标签: javascript

是否有本机JavaScript函数(或JavaScript的库/模块)修改了键的值,然后返回完整的对象?

这就是我所做的:

function modifyJSON(jsob, key, val) {
    var newjsob = JSON.parse(JSON.stringify(jsob));
    newjsob[key] = val;
    return newjsob;
}

(当然,如果我想修改原文,我可以删除var newjsob...并直接使用jsob。)

这很有效,但是如果这种功能已经在某个地方实现过了,我宁愿使用它而不是自己动手。

2 个答案:

答案 0 :(得分:1)

基本上,困难的部分是深度克隆。 Lodash可以为您深度克隆对象。

https://lodash.com/docs/4.16.2#cloneDeep

function modifyJSON(jsob, key, val) {
    var newjsob = _.cloneDeep(jsob);
    newjsob[key] = val;
    return newjsob
}

获得新对象后,您可以根据需要修改对象的属性。

但是,请注意深度复制速度很慢。只有你必须使用它。

https://jsfiddle.net/38kscyxa/

答案 1 :(得分:1)

你的头衔有点误导。您正在做的是深度克隆现有对象,然后更改新对象的属性。

如果浅层克隆就足够了,可以使用Object.assign:

var update = {};
update[key] = val;
return Object.assign(jsob, update);

如果您需要深度克隆,我会查看ImmutableJS。更新不可变数据结构上的任何字段时,将返回应用了更新的原始结构的克隆。这几乎就是你所写的确切行为。