文档章节

js数组去重

c
 caiyezi
发布于 2016/11/08 20:24
字数 262
阅读 0
收藏 0

对于如下对象数组

[{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;

 

本文转载自:http://www.cnblogs.com/vipzhou/p/5335924.html

共有 人打赏支持
c
粉丝 1
博文 108
码字总数 0
作品 0
西安
程序员

暂无文章

Django支持中文

django是支持中文界面, 先找到Django语言包安装目录,我的在: /usr/local/python3/lib/python3.6/site-packages/django/conf/locale 有zh-Hans和zh-Hant两个文件, 其中zh-Hans是简体中文,...

MichaelShu
18分钟前
1
0
迷宫问题:顺序栈解法

采用顺序栈以及回溯法,一个比较简单的问题,但是从来没有写过,也算是弥补一下自己欠数据结构的债吧,居然也花了一个半小时,无地自容了。。 定义好数据结构求解算法就显得容易一些了。 st...

LoSingSang
24分钟前
0
0
Zookeeper 概述及应用场景

一、概述 分布式协调技术,主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源,防止造成"脏数据"的后果。 ZooKeeper是一个分布式的,开放源码的分布式应用...

PeakFang-BOK
32分钟前
0
0
(译)OpenGL ES2.0 – Iphone开发指引

教程截图: OpenGL ES 是可以在iphone上实现2D和3D图形编程的低级API。 如果你之前接触过 cocos2d,sparrow,corona,unity 这些框架,你会发现其实它们都是基于OpenGL上创建的。 多数程序员...

robslove
42分钟前
0
0
金九银十跳槽季,程序员面试点解析之Java专场

前言 近年来Java工程师这个岗位炙手可热,市场需求大,学习Java的人也越来越多,所以IT企业与求职者的选择都比较多,那么IT企业在面试时都会提哪些问题呢。下面为大家分享 Java高级工程师面试...

老道士
44分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部