有“本地人”吗?修改对象属性的Javascript函数
Is there a "native" Javascript function that modifies an object property
是否有一个本地JavaScript函数(或JavaScript库/模块)修改键的值,然后返回完整的对象?
这是我所做的:
function modifyJSON(jsob, key, val) {
var newjsob = JSON.parse(JSON.stringify(jsob));
newjsob[key] = val;
return newjsob;
}
(当然,如果我想修改原始文件,我可以删除var newjsob...
并直接使用jsob)
这可以工作,但是如果这种类型的功能已经在某个地方实现了,我宁愿使用它而不是自己编写。
你的标题有点误导人。你所做的是深度克隆一个现有对象,然后改变新对象的属性。
如果浅层克隆足够了,您可以使用Object.assign:
var update = {};
update[key] = val;
return Object.assign(jsob, update);
如果你需要深度克隆,我会检查ImmutableJS。当更新不可变数据结构上的任何字段时,将返回应用了更新的原始结构的克隆。
基本上,困难的部分是深度克隆。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/相关文章:
- Javascript-在全局作用域中调用本地函数/属性
- 使用字符串获取本地对象的属性
- 如何在使用 AngularJS ng-repeat 时初始化本地范围内的属性
- 枚举本地存储属性
- 根据下拉列表中所选值的其他属性筛选本地剑道数据源
- 将 HTML5 数据属性保留在本地存储中
- 无法使用本地存储读取未定义的属性推送
- 使用本地存储值作为属性选择器
- Chrome本地存储;t在Mac OS中工作属性
- 无法更改从本地存储检索的对象的属性
- 获取sencha touch中本地存储javascript文件的属性
- Javascript:“;无法读取属性“”;name”;未定义的“;本地javascript代码出错
- 模板中的include、partial和/或block之间的区别是什么.EJS/EJS本地人
- 关于在循环函数中设置本地属性的错误(Firefox和Safari)
- 如何在javascript中使用不同的本地名称来引用变量或属性
- 如何将作用域变量传递给angular的本地输入最小属性
- 是否有可能本地扩展web API以允许CSSRule.cssText返回非标准css属性
- 用JavaScript读取本地文件:单个文件等价于files属性
- 玉本地人的范围
- 有“本地人”吗?修改对象属性的Javascript函数