Skip to content

例:数组值为字符,使用new Set()去重,适用于基本数据类型,引用类型不可以

js
let arr = ['a', 'b', 'c', 'd', 'a', '2', 'd', 'c'];
  let setArr = (arr) => {
    let set = new Set(arr);
    return set;
  }
arr = setArr(arr);
js
let arr = [1,2,3,4,5,1,2,3];
Array.from(new Set(arr));	//[1,2,3,4,5]

例:数组去重判断元素出现次数

js
let arr2 = ['a', 'b', 'c', 'd', 'a', '2', 'd', 'c'];
  let setArr2 = (arr) => {
    let newarr = [],
      obj = {};
    for (let i = 0; i < arr.length; i++) {
      if (!obj[arr[i]]) {
        newarr.push(arr[i]);
        obj[arr[i]] = 1;
      } else {
        obj[arr[i]]++
      }
    }
    return newarr;
  }
  arr2 = setArr2(arr2);

例:使用indexOf判断去重

js
let arr3 = ['a', 'b', 'c', 'd', 'a', '2', 'd', 'c'];
  let setArr3 = (arr) => {
    let newarr = [];
    for (let i = 0; i < arr.length; i++) {
      if (newarr.indexOf(arr[i]) === -1 || newarr.indexOf(arr[i]) == -1) {
        newarr.push(arr[i])
      }
    }
    return newarr;
  }
arr3 = setArr3(arr3);

例:数组元素为对象去重

js
let arr4 = [
    { 'name': 'along', 'age': '18', 'sex': '男' },
    { 'name': 'along2', 'age': '18', 'sex': '男' },
    { 'name': 'along3', 'age': '18', 'sex': '男' },
    { 'name': 'along', 'age': '18', 'sex': '男' },
    { 'name': 'along5', 'age': '18', 'sex': '男' }
  ]
  let objKey = (obj, keys) => {
    let n = keys.length,
      key = [];
    while (n--) {
      key.push(obj[keys[n]]);
    }
    return key.join('|');
  }
  let uniqeByKeys = (array, keys) => {
    let arr = [];
    let hash = {};
    for (let i = 0, j = array.length; i < j; i++) {
      let k = objKey(array[i], keys);
      if (!(k in hash)) {
        hash[k] = true;
        arr.push(array[i]);
      }
    }
    return arr;
  }
arr4 = uniqeByKeys(arr4, ['name']);

例:根据字段值去重

js
let arr5 = [
    { 'name': 'along', 'age': '18', 'sex': '男' },
    { 'name': 'along2', 'age': '18', 'sex': '男' },
    { 'name': 'along3', 'age': '18', 'sex': '男' },
    { 'name': 'along', 'age': '18', 'sex': '男' },
    { 'name': 'along5', 'age': '18', 'sex': '男' }
  ]
  let setArr5 = (arr) => {
    let result = [];
    let obj = {};
    for (let i = 0; i < arr.length; i++) {
      if (!obj[arr[i].name]) {  //obj[arr[i].name === false  !false === true
        result.push(arr[i]);
        obj[arr[i].name] = true;
      }
    }
    return result;
  }
  arr5 = setArr5(arr5);

例:reduce实现数组去重

js
let person = [
    { id: 0, name: "小明" },
    { id: 1, name: "小张" },
    { id: 2, name: "小李" },
    { id: 3, name: "小孙" },
    { id: 1, name: "小周" },
    { id: 2, name: "小陈" },
  ];

  let obj = {};

  person = person.reduce((cur, next) => {
    obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
    return cur;
  }, [])