我有一个包含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个对象。
答案 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