Angular 6数组已更新,未进行任何更新

时间:2018-10-08 08:55:06

标签: typescript angular6

我有以下代码,其工作是从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”应该被更新,但是它也以某种方式更新了数组。

  1. 有人可以解释为什么会这样吗?
  2. 如何停止更新数组?

2 个答案:

答案 0 :(得分:0)

这可能是因为使用此指令:

var tempRowData = array;

您要创建两个指向相同内存地址的变量,因此更新一个变量也会更新另一个变量。

您需要创建一个新数组并将旧数组的每个值复制到新数组中。

通常原始数据通过值传递,非原始数据通过引用传递

答案 1 :(得分:0)

您也可以尝试使用“ ...”运算符复制阵列。

var tempRowData = [...array];

这正是您想要做的,即,一个一个地复制每个元素。

...array

将为您提供数组的元素。 并将其放入

[ ];

将为您提供一个具有相同元素但具有不同数组绑定的数组。

注意:循环复制和...方法仍将通过引用复制元素。这意味着对数组进行变异(添加删除元素)可能不会对原始数组产生任何影响,但是对于对象元素,更改任何元素的属性都会影响原始数组中的元素。