Skip to content
On this page

去重系列

TIP

去重是非常常用的方法,下面咱们就写几个小例子一块复习下去重。

Array.form + new Set

js
// 使用 Array.form 搭配 new set 可实现数组字符串、布尔简单数组去重
// 不能对数组对象去重。
const uniq = (data) => {
  return Array.form(new Set(data));
}

for + for 实现对简单数组去重

js
const uniq = (data) => {
  const results = [];
  for (let i = 0; i < data.length; i++) { // 循环原数据
    const element = data[i];
    let uniqFlag = false;

    for (let j = 0; j < results.length; j++) { // 循环已去重后的数据
      const resItem = results[j];
      if(resItem === element) {
        uniqFlag = true;
        break;
      }
    }

    if(!uniqFlag) {
      results.push(element); // 如果uniqFlag === false 就证明results 还没有该数据
    }
  }

  return results;
}

一层 for 对简单数据去重

js
const uniq = (data) => {
  const results = [];
  const resultMap = {};

  for (let i = 0; i < data.length; i++) {
    const element = data[i];
    if(!resultMap[element]) {
      resultMap[element] = true;
      results.push(element)
    }
  }

  return results;
}

WARNING

以上就是对简单数组去重的几个小函数,建议使用最后一个一层for性能最佳,下面咱们实现对数组对象去重。

for 对数组对象去重

js
const uniqBy = (data, key) => {
  const results = [];
  const resultMap = {};

  for (let i = 0; i < data.length; i++) {
    const element = data[i];
    if(!resultMap[element[key]]) {
      resultMap[element[key]] = true;
      results.push(element)
    }
  }

  return results;
}

WARNING

以上就是对数组去重的几个小例子,lodash工具库有相关uniquniqBy方法可以直接用,但是还是在会自己写的基础上去用吧。

Released under the MIT License.