簡體   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