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

时间:2018-12-28 09:39:48

标签: angular typescript

我有一个包含146个对象的数组(目前)和一个与路由器一起提供的ID。 我想删除对象,如果object.id不等于id。 我为此编写了一个函数,但它仅适用于数组的一半。在添加这些接头之前,此功能运行良好。 我的代码;

getFullData(){
var fullData = [OBJECTS].sort(function(a,b){if(a.date<b.date)return 1; if(a.date > b.date) return -1})} //sorting

fullData.map(val=>{
  Object.assign(val, {dataType:this.getDateType(val.date)}); //this line not about these problem
  if (val.device !== this.id) {
    fullData.splice(fullData.indexOf(val), 1);
  }  
});
return fullData;
}

此对象上的所有ID暂时相同。当我使用路由器路由不同的ID时,必须删除所有ID,但只能删除73个对象。

2 个答案:

答案 0 :(得分:5)

您正在循环拼接相同的数组,最好在映射之前使用过滤器:

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;
  })

答案 1 :(得分:1)

使用filter而不是在地图中进行拼接。

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 

详细了解filter

相关问题