繁体   English   中英

对象数组的意外突变

[英]Unexpected mutation of object array

我有以下代码(构建我自己的基于对象的小api...)

operator = {};

operator.set_data = function (json) {
    this.data = json
};

operator.first_load_chart = function () {
    let ref_data = operator.data;
    ref_data['date'] = ref_data['date'].map(x => x ? new Date(x * 1000) : null);
};

operator.first_load_chartoperator.data首次分配后运行, operator.data['date']是第一个 unix 时间戳。

然而,当我在operator.first_load_chart operator.data['date]现在更改为Date对象之后在控制台中运行console.log(operator.data['date'])时?

为什么会这样,我该如何防止这种突变?

let ref_data = operator.data
    ref_data['date'] = ref_data['date'].map(x => x ? new Date(x * 1000) : null)

这里 ref_data 正在获取对运算符中实际数据的引用。 因此,当您使用 ref_data 修改值时,您将依次更新操作员本身的实际数据。 如果这不是故意的,您应该在修改之前制作数据对象的副本。

let ref_data = Object.assign({},operator.data);
 ref_data['date'] = ref_data['date'].map(x => x ? new Date(x * 1000) : null)

请注意这不是深拷贝,即如果您有嵌套对象,则需要单独处理它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM