javascript - 旧 JSON 值已更改

标签 javascript jquery json

当将 columnsData 值分配给 columns 时,我有两个 JSON 对象 columnsDatacolumns,这两个值都会更改。

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/

相关文章:

javascript - 洛达什和鲍尔 : best way to specify underscore "drop in replacement" version

javascript - jQuery 搜索输入 css 排序

javascript - jQuery 触发器在选定的下拉选项上单击(或选择)

java - JSON 处理linkedHashMap

c# - 如何从 Fiddler 中显示的 JSON 对象中删除转义字符

javascript - 从 javascript 字符串中剥离 U+10000-U+10FFFF

javascript - 如何在关闭时制作动画?[Javascript]

javascript - 到达水平滚动端时如何设置[禁用] attr? (小 slider )

jquery - 如何使用 jQuery 和 jQuery UI 保持 div 相对于可调整大小的 div 的宽度?

json - 通过多个编码保留 json.RawMessage