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 条评论
登录 后参与评论

相关文章

来自专栏Android机器圈

Java中list<Object[]>、list<Student>、list<Map<String,String>>排序

1:list<Object[]>的排序 public static void main(String[] args) { // TODO Auto-gene...

3378
来自专栏技术碎碎念

python3 入门 (三) 函数与lambda表达式、闭包

函数 是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。 函数代码块以def关键词开头,后接函数标识符名称和圆括号() 任何传入参数和自变量必须放在圆...

3248
来自专栏北京马哥教育

一文读懂Python可迭代对象、迭代器和生成器

1256
来自专栏py+selenium

python爬虫常用正则表达式组合匹配

正则表达式在线测试工具:http://tool.oschina.net/regex/?optionGlobl=global

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

100. 删除排序数组中的重复数字 双指针+替换

给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。...

783
来自专栏前端正义联盟

一道 js 闭包面试题的学习

最近看到一条有意思的闭包面试题,但是看到原文的解析,我自己觉得有点迷糊,所以自己重新做一下这条题目。

1394
来自专栏老九学堂

Java微课堂之基本选择结构2

本节讲解知识点回顾 ? ? ? 本节编程技巧和注意事项 条件选择结构关于分号和大括号什么时候可以打,什么时候不用打,它的意义是不同的。

2606
来自专栏Java帮帮-微信公众号-技术文章全总结

07.Java变量类型

07.Java变量类型 Java 变量类型 在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下: ? 格式说明:type为Java数据类型。i...

3437
来自专栏别先生

java中集合类中Collection接口中的Map接口的常用方法熟悉

1:Map接口提供了将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。Map接口中同样提供了集合的常用方法。 2:由于Map集合中的元素...

19310
来自专栏星汉技术

Scala中的集合类型

41610

扫码关注云+社区