博客除了是分享,也是积累的过程,有什么好的提议也希望能在评论区留言,共同进步
对数组去重实际上此类文章有很多,仅仅是自己的总结
es6新增方法set
首先set的特性是: Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
根据这一点就可以对数组去重
var a = [1,2,3,4,1,1,3,4];
var res = new Set([...a]); // Set(4) {1, 2, 3, 4} [object Set]
需要注意: 直接new Set() 返回结果是Set对象 ,所以需要加一条:
var result = Array.from(new Set([...a])) // (4) [1, 2, 3, 4]
var result = [...new Set([...a])]
对于json数组的去重处理
工作·项目中常遇到的更多是json数组,此时Set则无法使用、故而自己会封装一些方法来使用
/**
* json数组去重
* @param arr 原对象json对象
* @param attribute 去重指定的对象属性
* */
function uniqueArr(arr, attribute) {
let temp = [];
for (let i = 0; i < arr.length; i++) {
var isRepeat = false;
for (let j = 0; j < temp.length; j++) {
if (temp[j][attribute] == arr[i][attribute]) {
isRepeat = true;
break;
}
}
if (!isRepeat) temp.push(arr[i]);
}
return temp;
}
var arr = [
{
id: 1,
name: 'ming',
age: '10'
},
{
id: 1,
name: 'ming',
age: '10'
},
{
id: 2,
name: 'zhang',
age: '12'
}
]
//根据id来去掉同一个元素,此类情况是后台返回数据都是唯一标识id,
uniqueArr(arr, 'id')
改造下以上方法:
function uniqueArr(arr) {
let temp = [];let map = {}
for (let i = 0; i < arr.length; i++) {
if (!map[arr[i]) {
temp.push(arr[i])
map(arr[i]) = true
}
}
return temp;
}
uniqueArr(arr)
继续改造:利用indexOf() 方法 同样不适用于json数组,只适合一般的数组
var arr = ['a','c', 'a']
function uniqueArr(arr) {
let temp = [];
for (let i = 0; i < arr.length; i++) {
if (temp.indexOf(arr[i] === -1)) {
temp.push(arr[i])
}
}
return temp;
}
uniqueArr(arr)