数组去重
ES6写法
使用Map
function fun(data) { const aMap = new Map(); return data.filter(e => !aMap.has(e) && aMap.set(e, 1)); } console.log(fun([1, 2, 3, 2, 2, 3, 3, 5, 6, 4, 5]))
使用Set
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set
本身是一个构造函数,用来生成 Set 数据结构。
let arr = [1, 0, 0, 2, 9, 8, 3, 1]; function unique(arr) { return Array.from(new Set(arr)) } console.log(unique(arr)); // [1,0,2,9,8,3]
或
let arr = [1, 0, 0, 2, 9, 8, 3, 1]; function unique(arr) { return [...new Set(arr)] } console.log(unique(arr)); // [1,0,2,9,8,3]
上面的方法也可以用于,去除字符串里面的重复字符。
[...new Set('ababbc')].join('') // "abc"
ES5写法
1 普通数组
fun(data) {
const obj: any = {};
const result = [];
for (const item of data) {
if (!obj[item]) {
result.push(item);
obj[item] = 1;
}
}
return result;
}
2 对象数组
fun(data: Array<any>) { const obj: any = {}; const result = []; for (const item of data) { if (!obj[item.Id]) { result.push(item); obj[item.Id] = 1; } } return result; }
3 两个数组
fun(a: any[], b: any[]): any[] { const arr = a.concat(b); const result = []; const obj: any = {}; for (const item of arr) { if (!obj[item]) { result.push(i); obj[item] = 1; } } return result; }