当将 columnsData
值分配给 columns
时,我有两个 JSON 对象 columnsData
和 columns
,这两个值都会更改。
var columnsData = [
{id: "id"},
{id: "root_task_assignee"},
{id: "root_task_id"},
{id: "root_task_status"},
{id: "root_task_tracker"},
{id: "rt_category"},
{id: "rt_priority"},
{id: "rt_subject"},
]
var columns = [];
使用下面的函数,我将 columnsData
值分配给 columns
对象,并且还添加了一些附加字段
for(i = 0;i < columnsData.length; i++){
columns[i] = columnsData[i];
columns[i]["name"] = columnsData[i]["name"] || columnsData[i]["id"];
columns[i]["type"] = columnsData[i]["id"]["type"] || "string";
}
但分配后两者具有相同的值。旧的 JSON columnsData 值如何更改?还有其他方法来赋值吗
最佳答案
columns[i] = columnsData[i]
不会复制数据,而是对相同数据进行额外引用。
例如,假设您给 Random Jones 先生起了一个昵称“Cozy”。如果你给 Cosy 一个信封让他拿着,如果 Jones 先生现在也拿着一个信封,你会感到惊讶吗?
这里也是同样的事情。如果更改 columns[i]
,您也会更改 columnsData[i]
,因为它们是同一个对象。
如果你想让它们不同,你就必须克隆它。在这种情况下,您只需使用 id
创建一个新对象:
columns[i] = { id: columnsData[i].id };
一般来说,您最好找到一个不错的克隆
函数。
关于javascript - 旧 JSON 值已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35077557/