Skip to main content

手写数组去重

Set

var uniq = function(arr){
return Array.from(new Set(arr))
}

var nums = [1, 2, 2, 3, 4]
console.log(uniq(nums))

使用 Map

  1. 声明 map 数据
  2. for 遍历
    • 防御性:undefined 跳出此循环
    • 存在:跳出此循环
    • 不存在 存入 map.set(num,true)
  3. 返回map转数组[map.keys()]
var uniq = function(array){
const map = new Map() // 数据唯一性
for (let i = 0; i < array.length; i++) {
const num = array[i];
// 空白,,:跳出此循环
if(num === undefined){continue}
// 存在:跳出此循环
if(map.has(num)){continue}
// 不存在
map.set(num,true)
}

return [map.keys()]
}

var nums = [1, 2, 2, , 3, 4]
console.log(uniq(nums))

使用计数排序的思路,缺点是只支持字符串

var uniq = function(array){
const map = {}
for (let i = 0; i < array.length; i++) {
const num = array[i];
// 空白:跳出此循环
if(num === undefined){continue}
// 存在:跳出此循环
if(map[num]){continue}
// 不存在
map[num] = true
}
// Object.keys只能变为字符串
const result = []
for (const key in map) {
result.push(parseInt(key))
}
return result
}

var nums = [1, 2, 2, 3, 4]
console.log(uniq(nums))

二维数组去重

相同的 name 和 age 去重

var oldArr = [
{name:1,age:1},
{name:2,age:2},
{name:2,age:2},
{name:3,age:3},
{name:3,age:4},
{name:4,age:5},
{name:4,age:4},
{name:4,age:0},
{name:5,age:6},
{name:5,age:6},
{name:1,age:0},
{name:1,age:0},
{name:2,age:0},
{name:3,age:0},
{name:1,age:0},
];

const obj = {};

for(const item of oldArr){
obj[item.name+','+item.age] = item
}

oldArr = Object.values(obj)
console.log(oldArr) //现在就得到大家想要的结果了。

相同的 name 去重

var oldArr = [
{name:1,age:1},
{name:2,age:2},
{name:2,age:2},
{name:3,age:3},
{name:3,age:4},
{name:4,age:5},
{name:4,age:4},
{name:4,age:0},
{name:5,age:6},
{name:5,age:6},
{name:1,age:0},
{name:1,age:0},
{name:2,age:0},
{name:3,age:0},
{name:1,age:0},
];

const obj = {};

oldArr = oldArr.reduce((pre,cur)=>{
obj[cur.name] ? '' : obj[cur.name] = true && pre.push(cur)
return pre;

},[])

console.log(oldArr) //搞定

数组嵌套去重

var arr = [["aa","bb","cc"],["aa","bb","cc"],["b","b","v"]];
var hash = {};
var result = [];
for(var i = 0, len = arr.length; i < len; i++){
if(!hash[arr[i]]){
hash[arr[i]] = true;
result.push(arr[i]);
}
}
console.log(result);