# 数组对象去重

### 问题：数组对象去重

var arr = [{name: 'a',id: 1}, {name: 'a',id: 2}, {name: 'b',id: 3}, {name: 'c',id: 4}, {name: 'c',id: 6}, {name: 'b',id: 6}, {name: 'd',id: 7}];

[{name: 'a',id: 1}, {name: 'b',id: 3}, {name: 'c',id: 4}, {name: 'd',id: 7}];

var arr = [{name: 'a',id: 1}, {name: 'a',id: 2}, {name: 'b',id: 3}, {name: 'c',id: 4},

{name: 'c',id: 6}, {name: 'b',id: 6}, {name: 'd',id: 7}];

function deWeight() {

for (var i = 0; i < arr.length - 1; i++) {

for (var j = i + 1; j < arr.length; j++) {

if (arr[i].name == arr[j].name) {

arr.splice(j, 1);

//因为数组长度减小1，所以直接 j++ 会漏掉一个元素，所以要 j--

j--;

}

}

}

return arr;

}

var newArr = deWeight();

console.log('%c%s', 'color:red;', '方法一：es5,newArr', newArr);

### 方法二：es5新建数据双重循环，去重arr2

vararr2 = [{name: 'a',id: 1}, {name: 'a',id: 2}, {name: 'b',id: 3}, {name: 'c',id: 4},

{name: 'c',id: 6}, {name: 'b',id: 6}, {name: 'd',id: 7}];vartemp = [];function deWeightTwo() {

arr2.forEach(function(a) {

varcheck = temp.every(function(b) {

returna.name !== b.name;

})

check ? temp.push(a) : ''    })

return temp;

}varnewArr2 = deWeightTwo();

console.log('%c%s', 'color:red;', '方法二：es5,newArr2', newArr2);

### 方法三：es6的Map()，去重arr3

vararr3 = [{name: 'a',id: 1}, {name: 'a',id: 2}, {name: 'b',id: 3}, {name: 'c',id: 4},

{name: 'c',id: 6}, {name: 'b',id: 6}, {name: 'd',id: 7}];

let deWeightThree = () => {

let name = 'name';

let map =new Map();

for (let item of arr3) {

if(!map.has(item.name)) {

map.set(item.name, item);

}

}

return [...map.values()];

}

let newArr3 = deWeightThree();

console.log('%c%s', 'color:red;', '方法三：es6,newArr3', newArr3);

### 方法四：es5，对象法去重arr4

var arr4 = [{name: 'a',id: 1}, {name: 'a',id: 2}, {name: 'b',id: 3}, {name: 'c',id: 4},

{name: 'c',id: 6}, {name: 'b',id: 6}, {name: 'd',id: 7}];

// array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

// (function(必选初始值或计算结束返回值, 必选当前元素, 可选索引, 可选原数组),可选函数初始值)

var obj = {};

function deWeightFour() {

arr4 = arr4.reduce(function(a, b) {

obj[b.name] ? '' : obj[b.name] = true && a.push(b);

return a;

}, [])

return arr4;

}

var newArr4 = deWeightFour();

console.log('%c%s', 'color:red;', '方法四：es5,newArr4', newArr4);

• 序言：七十年代末，一起剥皮案震惊了整个滨河市，随后出现的几起案子，更是在滨河造成了极大的恐慌，老刑警刘岩，带你破解...
沈念sama阅读 157,298评论 4 360
• 序言：滨河连续发生了三起死亡事件，死亡现场离奇诡异，居然都是意外死亡，警方通过查阅死者的电脑和手机，发现死者居然都...
沈念sama阅读 66,701评论 1 290
• 文/潘晓璐 我一进店门，熙熙楼的掌柜王于贵愁眉苦脸地迎上来，“玉大人，你说我怎么就摊上这事。” “怎么了？”我有些...
开封第一讲书人阅读 107,078评论 0 237
• 文/不坏的土叔 我叫张陵，是天一观的道长。 经常有香客问我，道长，这世上最难降的妖魔是什么？ 我笑而不...
开封第一讲书人阅读 43,687评论 0 202
• 正文 为了忘掉前任，我火速办了婚礼，结果婚礼上，老公的妹妹穿的比我还像新娘。我一直安慰自己，他们只是感情好，可当我...
茶点故事阅读 52,018评论 3 286
• 文/花漫 我一把揭开白布。 她就那样静静地躺着，像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上，一...
开封第一讲书人阅读 40,410评论 1 211
• 那天，我揣着相机与录音，去河边找鬼。 笑死，一个胖子当着我的面吹牛，可吹牛的内容都是我干的。 我是一名探鬼主播，决...
沈念sama阅读 31,729评论 2 310
• 文/苍兰香墨 我猛地睁开眼，长吁一口气：“原来是场噩梦啊……” “哼！你这毒妇竟也来了？” 一声冷哼从身侧响起，我...
开封第一讲书人阅读 30,412评论 0 194
• 序言：老挝万荣一对情侣失踪，失踪者是张志新（化名）和其女友刘颖，没想到半个月后，有当地人在树林里发现了一具尸体，经...
沈念sama阅读 34,124评论 1 239
• 正文 独居荒郊野岭守林人离奇死亡，尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
茶点故事阅读 30,379评论 2 242
• 正文 我和宋清朗相恋三年，在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
茶点故事阅读 31,903评论 1 257
• 序言：一个原本活蹦乱跳的男人离奇死亡，死状恐怖，灵堂内的尸体忽然破棺而出，到底是诈尸还是另有隐情，我是刑警宁泽，带...
沈念sama阅读 28,268评论 2 251
• 正文 年R本政府宣布，位于F岛的核电站，受9级特大地震影响，放射性物质发生泄漏。R本人自食恶果不足惜，却给世界环境...
茶点故事阅读 32,894评论 3 233
• 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹，春花似锦、人声如沸。这庄子的主人今日做“春日...
开封第一讲书人阅读 26,014评论 0 8
• 文/苍兰香墨 我抬头看了看天上的太阳。三九已至，却和暖如春，着一层夹袄步出监牢的瞬间，已是汗流浃背。 一阵脚步声响...
开封第一讲书人阅读 26,770评论 0 192
• 我被黑心中介骗来泰国打工， 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留，地道东北人。 一个月前我还...
沈念sama阅读 35,435评论 2 269
• 正文 我出身青楼，却偏偏与公主长得像，于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子，可洞房花烛夜当晚...
茶点故事阅读 35,312评论 2 260