首页 > 解决方案 > 如果更改原始文件,如何在 JS 中复制重复更改的对象

问题描述

我正在制作一个具有重复功能的计划/日历网站。

var chain = _.chain(state.items).filter({'id': 1}).head().value();
console.log(chain);

chain在这里我过滤一个对象,当我更改原始对象时,我如何复制它,副本也会更改,反之亦然?

标签: javascriptvue.js

解决方案


分配了非原始值的变量将获得对该值的引用。该引用指向对象在内存中的位置。变量实际上并不包含值。这就是为什么在更改副本时原始值会发生变化的原因。

这可以通过使用 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);

推荐阅读