我有以下代码,其工作是从JSON中删除特定属性,以便仅某些选定字段可以显示在表中
var tempColumnDefs = [];
var tempRowData = array;
for( var i = 0;i<columns.length;i++)
{
if(this.dynoArray[this.header[i]])
{tempColumnDefs.push(columns[i]);}
}
for( var i = 0;i<tempRowData.length;i++)
{
for(var j = 0;j<this.header.length;j++)
{
if(!this.dynoArray[this.header[j]])
{
delete tempRowData[i][this.header[j]];
}
}
}
this.cols = tempColumnDefs;
this.cars = tempRowData;
如您所见,“ array”永远不在左侧,因此无论如何都不应该对其进行更新,只有“ tempRowData”应该被更新,但是它也以某种方式更新了数组。
答案 0 :(得分:0)
这可能是因为使用此指令:
var tempRowData = array;
您要创建两个指向相同内存地址的变量,因此更新一个变量也会更新另一个变量。
您需要创建一个新数组并将旧数组的每个值复制到新数组中。
通常原始数据通过值传递,非原始数据通过引用传递
答案 1 :(得分:0)
您也可以尝试使用“ ...”运算符复制阵列。
var tempRowData = [...array];
这正是您想要做的,即,一个一个地复制每个元素。
...array
将为您提供数组的元素。 并将其放入
[ ];
将为您提供一个具有相同元素但具有不同数组绑定的数组。
注意:循环复制和...方法仍将通过引用复制元素。这意味着对数组进行变异(添加删除元素)可能不会对原始数组产生任何影响,但是对于对象元素,更改任何元素的属性都会影响原始数组中的元素。