数组去重

简单数组

function unique(arr){
  return Array.form(new Set(arr))
}

复杂数组对象不带嵌套循环

//  方法1:利用对象访问属性的方法,判断对象中是否存在key
var result = [];
var obj = {};
for(var i =0; i<arr.length; i++){
   if(!obj[arr[i].key]){
      result.push(arr[i]);
      obj[arr[i].key] = true;
   }
}
console.log(result);

reduce 方法, 第一个参数为处理函数, 第二个为空数组

var hash = {};
arr = arr.reduce(function(item, next) {
    hash[next.name] ? '' : hash[next.name] = true && item.push(next);
    return item
}, [])
console.log(arr);

复杂数组对象带嵌套循环

function arrayNonRepeatfy(arr) {
  let map = new Map();
  let array = new Array();  // 数组用于返回结果
  for (let i = 0; i < arr.length; i++) {
    if(map .has(arr[i])) {  // 如果有该key值
      map .set(arr[i], true); 
    } else { 
      map .set(arr[i], false);   // 如果没有该key值
      array .push(arr[i]);
    }
  } 
  return array ;
}
 var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
    console.log(unique(arr))
//[1, "a", "true", true, 15, false, 1, {…}, null, NaN, NaN, "NaN", 0, "a", {…}, undefined]
const arr = [{ id: 1, name: 1 }, { id: 2, name: 2 }, { id: 1, name: 3 }];
function Filter(arr, key){
  const newArr = [];
  const map = new Map();
  for(let i of arr){
    if(!map.get(i.id)){
      map.set(i.id, i)
      newArr.push(i)
    }
  }

  return newArr
}
var a= Filter(arr, 'id');
console.log('a', a)

最后更新于

这有帮助吗?