技术文摘
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;
}
在实际应用中,您可以根据具体的需求和场景选择最合适的去重方法,以提高代码的效率和可读性。