今天做一个对象数组去重的东西,结构如下:如果arrv_Airpt_Cd和dpt_AirPt_Cd相同则认为是相同数据,需要去重。一开始直接遍历数组对象进行操作,发现性能很差,上千条数据就会宕浏览器,然后转换了下思路,直接遍历操纵对象的话会连续交换内存地址导致变卡(我猜测的,不知道原理,大佬们知道的话还请说明),所以选择了使用字符串数组代替原始数组,就能跑起来了,代码如下: clearRepeat(){ let _this = this; let olist = _this.flyList.data; //原始数据,对象型数组 let aresult = [olist[0].dpt_AirPt_Cd + '-' + olist[0].arrv_Airpt_Cd]; let oresult = []; for(let item of olist){ //提取对象中的信息,以-间隔,生成字符串数组 oresult.push(item.dpt_AirPt_Cd + '-' + item.arrv_Airpt_Cd); } for(let item of oresult){ //去重后放入aresult if(aresult.indexOf(item)<0 ) aresult.push(item); } _this.mapLines.data = aresult.map(function (val) { //转换 return { from: val.split('-')[0], to: val.split('-')[1] }; }) oresult.length = 0; aresult.length = 0; },请问还可以怎么优化?
1 回答
当年话下
TA贡献1890条经验 获得超9个赞
根据 item.dpt_AirPt_Cd 和 arrv_Airpt_Cd 为条件去重,返回去重后的数组
var fnDuplicateRemover = function(list) {
var newlist = [], hash = {};
for (var i = 0,list_length=list.length; i < list_length; i++) {
var item = list[i];
var key = item.dpt_AirPt_Cd + '/' + item.arrv_Airpt_Cd;
if (!hash[key]) {
newlist.push(hash[key] = item);
}
}
return newlist;
};
添加回答
举报
0/150
提交
取消