乐趣区

关于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);
};
退出移动版