为了账号安全,请及时绑定邮箱和手机立即绑定

请教关于这个对象数组去重的优化?

请教关于这个对象数组去重的优化?

倚天杖 2018-12-27 22:19:28
今天做一个对象数组去重的东西,结构如下:如果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;

};


查看完整回答
反对 回复 2019-01-07
  • 1 回答
  • 0 关注
  • 407 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信