是否有本机JavaScript函数(或JavaScript的库/模块)修改了键的值,然后返回完整的对象?
这就是我所做的:
function modifyJSON(jsob, key, val) {
var newjsob = JSON.parse(JSON.stringify(jsob));
newjsob[key] = val;
return newjsob;
}
(当然,如果我想修改原文,我可以删除var newjsob...
并直接使用jsob。)
这很有效,但是如果这种功能已经在某个地方实现过了,我宁愿使用它而不是自己动手。
答案 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
}
获得新对象后,您可以根据需要修改对象的属性。
但是,请注意深度复制速度很慢。只有你必须使用它。
答案 1 :(得分:1)
你的头衔有点误导。您正在做的是深度克隆现有对象,然后更改新对象的属性。
如果浅层克隆就足够了,可以使用Object.assign:
var update = {};
update[key] = val;
return Object.assign(jsob, update);
如果您需要深度克隆,我会查看ImmutableJS。更新不可变数据结构上的任何字段时,将返回应用了更新的原始结构的克隆。这几乎就是你所写的确切行为。