关于javascript:js数组去重论

汇合数组转换法

/**
 *
 * @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);
};

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理