集合数组转换法

/**
 *
 * @param {Array} data
 *
 * 思路
 * 1.将数组转成Set集合对象
 * 2.然后将集合对象转成数组
 */
const unique = (data) => {
  return Array.from(new Set(data));
};

查找尾部替换法

/**
 *
 * @param {Array} data
 *
 * 思路:
 * 1.查找每一项是否出现在后面的所有项中
 * 2.如果存在,将当前项替换为数组最后一项
 * 3.同时将数组长度减一
 * 4.再用当前替换过来的项,与后面的所有项比较,重复步骤一
 */

const unique = (data) => {
  for (let i = 0; i < data.length - 1; i++) {
    if (data.slice(i + 1).indexOf(data[i]) > -1) {
      data[i] = data[data.length - 1];
      data.length--;
      i--;
    }
  }
  return data;
};

清空过滤法

/**
 *
 * @param {Array} data
 *
 * 思路:
 * 1.查找每一项是否出现在后面的所有项中
 * 2.如果存在,将当前项替换为null
 * 3.过滤掉所有为null的项
 */

const unique = (data) => {
  for (let i = 0; i < data.length - 1; i++) {
    if (data.slice(i + 1).indexOf(data[i]) > -1) {
      data[i] = null;
    }
  }
  return data.filter((v) => v !== null);
};

查找删除法

/**
 *
 * @param {Array} data
 *
 * 思路:
 * 1.查找每一项是否出现在后面的所有项中
 * 2.如果存在,将当前项用splice去除
 * 3.避免数组塌陷,所以要在下一次循环时将数组下表变为当前下表,即i--
 */

const unique = (data) => {
  for (let i = 0; i < data.length - 1; i++) {
    if (data.slice(i + 1).indexOf(data[i]) > -1) {
      data.splice(i, 1);
      i--;
    }
  }
  return data.filter((v) => v !== null);
};

对象特性去重法

/**
 *
 * @param {Array} data
 *
 * 思路:
 * 1.对象的键名不允许重复
 * 2.将数组遍历,把每一项当做键名和键值
 * 3.拿出对象的keys或者values
 */

const unique = (data) => {
  const obj = {};
  for (let i = 0; i < data.length - 1; i++) {
    obj[data[i]] = data[i];
  }
  return Object.values(obj);
};

zpfei
186 声望7 粉丝

往事如风~