Angular map()内部的拼接函数只删除数组的一半

Angular map()内部的拼接函数只删除数组的一半,angular,typescript,Angular,Typescript,我现在有一个包含146个对象的数组和一个路由器附带的id。 如果object.id不等于id,我想删除对象。 我为此编写了一个函数,但它只适用于数组的一半。在我添加这些拼接之前,该函数运行良好。 我的代码 现在,对象上的所有id都是相同的。当我用路由器路由不同的id时,它必须删除所有id,但只删除73个对象。如果你正在拼接相同的数组,最好在映射之前使用过滤器: fullData = fullData .filter((val) => val.device !== this.id)

我现在有一个包含146个对象的数组和一个路由器附带的id。 如果object.id不等于id,我想删除对象。 我为此编写了一个函数,但它只适用于数组的一半。在我添加这些拼接之前,该函数运行良好。 我的代码


现在,对象上的所有id都是相同的。当我用路由器路由不同的id时,它必须删除所有id,但只删除73个对象。

如果你正在拼接相同的数组,最好在映射之前使用过滤器:

fullData = fullData
  .filter((val) => val.device !== this.id)
  .map((val) => {...val, dataType: this.getDateType(val.date) });
如果性能是一个问题,并且您不想循环两次,那么您都可以在筛选器中执行此操作:

fullData = fullData
  .filter((val) => {
    if (val.device !== this.id) {
      return false;
    }

    val.dataType = this.getDateType(val.date);

    return true;
  })

如果正在循环正在拼接的相同阵列,最好在映射之前使用过滤器:

fullData = fullData
  .filter((val) => val.device !== this.id)
  .map((val) => {...val, dataType: this.getDateType(val.date) });
如果性能是一个问题,并且您不想循环两次,那么您都可以在筛选器中执行此操作:

fullData = fullData
  .filter((val) => {
    if (val.device !== this.id) {
      return false;
    }

    val.dataType = this.getDateType(val.date);

    return true;
  })
在映射中使用过滤器而不是拼接

var newFullData = fullData.filter(val=> val.device === yourId)

//newFullData array will contain only those values of fullData where object with device value equals to yourId 
阅读更多关于在地图中使用过滤器而不是拼接的信息

var newFullData = fullData.filter(val=> val.device === yourId)

//newFullData array will contain only those values of fullData where object with device value equals to yourId 
阅读更多关于

的信息,请提供https://stackblitz.comcan 请提供https://stackblitz.com