javascript - 如果更改原始文件,如何在 JS 中复制重复更改的对象
问题描述
我正在制作一个具有重复功能的计划/日历网站。
var chain = _.chain(state.items).filter({'id': 1}).head().value();
console.log(chain);
chain
在这里我过滤一个对象,当我更改原始对象时,我如何复制它,副本也会更改,反之亦然?
解决方案
分配了非原始值的变量将获得对该值的引用。该引用指向对象在内存中的位置。变量实际上并不包含值。这就是为什么在更改副本时原始值会发生变化的原因。
这可以通过使用 JSON.parse() 和 JSON.stringify() 来解决
methods
在该部分中创建一个新函数
cloneObject:function(obj){
return JSON.parse(JSON.stringify(obj));
}
现在你可以调用这个方法来复制任何对象,比如
var items = this.cloneObject(state.items); // this will create a clone of the object
var chain = _.chain(items).filter({'id': 1}).head().value();
在这里,过滤器不会影响,state.items
因为我们克隆了这些数据。
如果您已经在使用lodash JS 库,您可以使用该cloneDeep()
方法制作副本
例如:
var items = _.cloneDeep(state.items);
var chain = _.chain(items).filter({'id': 1}).head().value();
console.log(chain);
推荐阅读
- php - Laravel 从 URL 获取未命名的“GET”参数 id
- javascript - 如何将按钮和输入元素添加到下拉列表中
- javascript - 怎样才能让用户做一次QUIZZ?
- android - 使用毕加索将base64字符串加载到imageview中
- ruby - 如何使用.include?捕获导致相同操作的多个选项
- php - 如何对“私有”构造函数进行例外处理?
- java - 如何在 Java 8 的范围内生成具有指定大小的随机整数的列表?
- c# - Unity3D 引擎类中不应该出现一致的“CS0201”错误
- regex - 如何计算最后出现在单元格中的Google表格单元格中特定字符的出现次数作为标准?
- java - 不兼容的类型。必需:T,找到 T。为什么?