js数组去重

对于如下对象数组

[{id: 0, name: "name1"}, {id: 1, name: "name2"},{id: 1, name: "name2"},{id: 1, name: "name2"}, {id: 2, name: "name3"}, {id: 0, name: "name4"}]

现在想要将id相同的对象的name拼起来,笨的算法如下:

var ids = [];
        var ret = [];
        var map = {};
        var arr = [{id: 0, name: "name1"}, {id: 1, name: "name2"},{id: 1, name: "name2"},{id: 1, name: "name2"}, {id: 2, name: "name3"}, {id: 0, name: "name4"}];        //循环调用
        for (let i = 0; i < arr.length; i++) {
            map["" + arr[i].id] = arr[i];
        }
        var mulObj = {};
        var mulArr = [];
        for (var i = 0; i < arr.length; i++) {
            var obj = arr[i];   //当前对象
            if (ids.indexOf(obj.id) != -1) {          //如果包含,先取出该对象,然后遍历查找重复对象
                mulObj = map["" + obj.id];        //重复的对象+obj已有对象-----合并
                mulArr.push(mulObj);
            } else {
                ids.push(obj.id);
                ret.push(obj);
            }
        }
        for (let i = 0; i < ret.length; i++) {
            for(let j=0;j<mulArr.length;j++){
                if(ret[i].id == mulArr[j].id){      //说明重复
                    ret[i].name += mulArr[j].name;
                }
            }
        }
        console.log(ret);

对于形如这种字符串或数字数组去重:

[1,2,3,4,2,6,3,2,6,6,8]

简单算法实现如下:

let ret = [];
let hash = {};
for (let i = 0; i < arr.length; i++) {
    let item = arr[i];
    let key = typeof(item) + item;
    if (hash[key] !== 1) {
        ret.push(item);
        hash[key] = 1;
    }
}
return ret;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我和PYTHON有个约会

24. 企业级开发基础5:面向对象特征(封装)

在我们程序开发过程中,定义好类型之后就可以通过类型来创建对象 如:我们定义一个中华人民共和国公民的类型

9310
来自专栏java工会

Java基础第一阶段知识点,招实习的面试官都在问这些

23190
来自专栏和蔼的张星的图像处理专栏

50. 数组剔除元素后的乘积两个遍历

给定一个整数数组A。 定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法。...

12940
来自专栏软件开发 -- 分享 互助 成长

堆排序

堆排序是对简单选择排序算法的一种改进,在每次选择最小记录的同时,根据比较结果对其他记录做出相应的调整。 堆是具有下列性质的完全二叉树:每个节点的值都大于(小于)...

19350
来自专栏java工会

Java基础第一阶段知识点,招实习的面试官都在问这些

a) 答:Java源文件被编译成字节码的形式,无论在什么系统环境下,只要有java虚

14010
来自专栏深度学习思考者

一文搞懂C/C++中指针那些事(上篇)

一 指针变量 1.间接存取        指针变量的值为地址;普通变量的值为数据;其中“*”为指针运算符。&是地址操作符,用来引用一个内存地址。通过在变量名...

226100
来自专栏数据结构笔记

数据结构(四):栈的应用之表达式求值

用户从控制台输入一个数学表达式(所有输入均合法),数学表达式只包含四则运算,程序需输出表达式对应的结果,如:

19020
来自专栏IT可乐

Java关键字(四)——final

  对于Java中的 final 关键字,我们首先可以从字面意思上去理解,百度翻译显示如下:

10130
来自专栏IT笔记

京东2017校园招聘笔试真题(希尔排序)

对关键字{10,20,8,25,35,6,18,30,5,15,28}序列进行希尔排序,取增量d =5时,排序结果为( ) A. {6,18,8,5,15,10...

31850
来自专栏前端知识分享

第164天:js方法调用的四种模式

函数名提升: script中脚本,在执行之前,会先把脚本中的所有的函数先进行编译解析,然后执行普通的js代码。

12120

扫码关注云+社区

领取腾讯云代金券