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

相关文章

  • spring mvc随笔

    一、SpringMvc学习笔记 1、使用SpringMvc时需在web.xml文件中添加配置 <servlet> <servlet-name>springMVC...

    用户1141560
  • jsp、servlet笔记

    1、init    初始化Jsp&Servlet方法    destroy 销毁Jsp&Servlet之前的方法    service 对用户请求生成响应的方法...

    用户1141560
  • oAuth2.0及jwt介绍

    oAuth2.0流程示意如下: ? 关于jwt介绍: ? 说明: 关于jwt简单说明一下,jwt即为json web token,是用来和服务端建立加密通信所使...

    用户1141560
  • v-selectpage 基于Vue2的高清重制版

    砸漏
  • Appium问题解决方案(5)- selenium.common.exceptions.InvalidSelectorException: Message: Locator Strategy 'nam

    selenium.common.exceptions.InvalidSelectorException: Message: Locator Strategy '...

    小菠萝测试笔记
  • hadoop搭建完全分布式集群

    后面的启动步骤可以用一步来代替,进入hadoop安装目录的sbin目录,执行:start-dfs.sh 。但建议还是按部就班来执行,比较可靠。

    用户7649162
  • python 子类中扩张超类属性

    class Person: def init(self, name): self.name = name

    用户5760343
  • 小程序顶部导航栏,可滑动,可动态选中放大

    代码里注释很明白了,大家自己跟着多敲几遍就可以了。后面会更新更多小程序相关的知识,请持续关注。

    编程小石头
  • Docker入门实践指南

    一、明确适用场景! Docker不是万灵药,有它自己的适用场景。在你得到这些好处的同时,也是要付出相应代价的。 对开发来说,可以快速搭建起一个测试环境,比传...

    陌涛
  • python string类方法

    py3study

扫码关注云+社区

领取腾讯云代金券