JS 里 6 个对象数组的去重手段

2024-12-28 20:33:50   小编

JS 里 6 个对象数组的去重手段

在 JavaScript 编程中,处理对象数组的去重是一项常见的任务。下面将为您介绍 6 种有效的去重手段。

第一种方法是使用 Array.prototype.reduce() 结合 Object.is() 进行去重。通过遍历数组,将每个对象作为键值对存储在一个新的对象中,如果对象不存在则添加。

function uniqueArray(arr) {
  return Object.values(arr.reduce((acc, cur) => {
    if (!Object.is(acc[JSON.stringify(cur)], cur)) {
      acc[JSON.stringify(cur)] = cur;
    }
    return acc;
  }, {}));
}

第二种方法是利用 Set 数据结构。先将对象数组转换为字符串数组,通过 Set 去重后再转换回对象数组。

function uniqueArray2(arr) {
  const stringifiedArr = arr.map(obj => JSON.stringify(obj));
  const uniqueStringSet = new Set(stringifiedArr);
  return Array.from(uniqueStringSet).map(str => JSON.parse(str));
}

第三种方法是先对对象数组进行排序,然后依次比较相邻的元素进行去重。

function uniqueArray3(arr) {
  arr.sort((a, b) => JSON.stringify(a) > JSON.stringify(b)? 1 : -1);
  const result = [arr[0]];
  for (let i = 1; i < arr.length; i++) {
    if (JSON.stringify(arr[i])!== JSON.stringify(result[result.length - 1])) {
      result.push(arr[i]);
    }
  }
  return result;
}

第四种方法是使用 lodash 库的 uniqBy 方法。

const _ = require('lodash');
function uniqueArray4(arr) {
  return _.uniqBy(arr, JSON.stringify);
}

第五种方法是通过自定义比较函数进行去重。

function customCompare(obj1, obj2) {
  const keys1 = Object.keys(obj1).sort();
  const keys2 = Object.keys(obj2).sort();

  if (keys1.length!== keys2.length) {
    return false;
  }

  for (let i = 0; i < keys1.length; i++) {
    if (obj1[keys1[i]]!== obj2[keys2[i]]) {
      return false;
    }
  }

  return true;
}

function uniqueArray5(arr) {
  const result = [];
  for (let i = 0; i < arr.length; i++) {
    let isUnique = true;
    for (let j = 0; j < result.length; j++) {
      if (customCompare(arr[i], result[j])) {
        isUnique = false;
        break;
      }
    }
    if (isUnique) {
      result.push(arr[i]);
    }
  }
  return result;
}

第六种方法是基于哈希表的思想。创建一个空的哈希表,将对象转换为字符串作为键,对象本身作为值。

function uniqueArray6(arr) {
  const hashMap = {};
  const result = [];
  for (const obj of arr) {
    const str = JSON.stringify(obj);
    if (!hashMap[str]) {
      hashMap[str] = obj;
      result.push(obj);
    }
  }
  return result;
}

在实际应用中,您可以根据具体的需求和场景选择最合适的去重方法,以提高代码的效率和可读性。

TAGS: JS 数据处理 JS 对象数组去重 对象数组技巧 JS 编程实践

欢迎使用万千站长工具!

Welcome to www.zzTool.com