返回

JS数组对象去重,探索高效剔除重复元素之道

前端

前言

在编写JavaScript代码时,数组和对象是不可或缺的数据结构,而对它们进行去重操作也是编程中的常见需求。数组或对象的去重意味着移除所有重复的元素,只保留不重复的唯一元素。掌握多种去重方法对于提高代码效率至关重要。本文将从多个角度详细剖析JS数组和对象去重的技巧,助您成为编程高手。

数组去重方法大PK

1. reduce()

reduce()方法是JavaScript中用于数组去重的一种强大工具。它的用法如下:

const uniqueArray = arr.reduce((acc, curr) => {
  if (!acc.includes(curr)) {
    acc.push(curr);
  }
  return acc;
}, []);

这个示例中,reduce()方法接收一个回调函数,该函数接收两个参数:累加器(acc)和当前元素(curr)。回调函数的目的是检查当前元素是否已存在于累加器中。如果不存在,则将其推入累加器。最终,累加器将包含数组中所有不重复的元素。

2. filter()

filter()方法也是一种常用的数组去重方法。它的用法如下:

const uniqueArray = arr.filter((item, index) => arr.indexOf(item) === index);

这个示例中,filter()方法接收一个回调函数,该函数接收两个参数:当前元素(item)和当前元素的索引(index)。回调函数的目的是检查当前元素在数组中的索引是否等于其自身。如果相等,则说明该元素是唯一的,将其保留在数组中。否则,将其过滤掉。最终,filter()方法将返回一个只包含不重复元素的新数组。

3. Set

Set是一种JavaScript内置的数据结构,它可以自动去除重复元素。它的用法如下:

const uniqueArray = [...new Set(arr)];

这个示例中,new Set(arr)将创建一个新的Set对象,该对象只包含arr数组中的不重复元素。然后,使用扩展运算符(...)将Set对象转换为数组,并将结果赋给uniqueArray。最终,uniqueArray将是一个不包含重复元素的新数组。

4. Map

Map也是一种JavaScript内置的数据结构,它可以存储键值对。它的用法如下:

const uniqueArray = [];
const map = new Map();
arr.forEach((item) => {
  if (!map.has(item)) {
    map.set(item, true);
    uniqueArray.push(item);
  }
});

这个示例中,首先创建一个新的Map对象。然后,使用forEach()方法遍历arr数组,并检查当前元素是否已存在于Map中。如果不存在,则将其添加到Map中,并将其推入uniqueArray。最终,uniqueArray将是一个不包含重复元素的新数组。

5. unique()

unique()是一种常用的第三方库,可以实现数组去重。它的用法如下:

const uniqueArray = _.unique(arr);

这个示例中,_是Lodash库的命名空间。unique()方法接收一个数组作为参数,并返回一个不包含重复元素的新数组。

对象去重方法探讨

1. reduce()

reduce()方法也可以用于对象去重。它的用法如下:

const uniqueObject = Object.values(arr.reduce((acc, curr) => {
  acc[curr] = true;
  return acc;
}, {}));

这个示例中,reduce()方法接收一个回调函数,该函数接收两个参数:累加器(acc)和当前元素(curr)。回调函数的目的是将当前元素作为键,true作为值,添加到累加器中。最终,累加器将包含对象中所有不重复的键值对。然后,使用Object.values()方法将累加器转换为一个只包含不重复值的数组,并将其赋给uniqueObject。

2. filter()

filter()方法也可以用于对象去重。它的用法如下:

const uniqueObject = Object.fromEntries(Object.entries(arr).filter(([key, value]) => arr[key] === value));

这个示例中,Object.entries(arr)将对象转换为一个包含键值对的数组。然后,filter()方法接收一个回调函数,该函数接收两个参数:当前元素的键(key)和当前元素的值(value)。回调函数的目的是检查当前元素的键是否与当前元素的值相等。如果相等,则说明该元素是唯一的,将其保留在数组中。否则,将其过滤掉。最终,Object.fromEntries()方法将过滤后的数组转换为一个新的对象,并将其赋给uniqueObject。

3. Set

Set也可以用于对象去重。它的用法如下:

const uniqueObject = {};
const set = new Set(Object.values(arr));
set.forEach((value) => {
  uniqueObject[value] = true;
});

这个示例中,首先创建一个新的Set对象,该对象只包含arr对象中所有不重复的值。然后,使用forEach()方法遍历Set对象,并将每个值作为键,true作为值,添加到uniqueObject中。最终,uniqueObject将是一个不包含重复键值对的新对象。

4. Map

Map也可以用于对象去重。它的用法如下:

const uniqueObject = {};
const map = new Map();
Object.entries(arr).forEach(([key, value]) => {
  if (!map.has(value)) {
    map.set(value, true);
    uniqueObject[key] = value;
  }
});

这个示例中,首先创建一个新的Map对象。然后,使用forEach()方法遍历对象,并将每个键值对添加到Map中。如果当前值不存在于Map中,则将其添加到Map中,并将当前键作为uniqueObject的键,当前值作为uniqueObject的值。最终,uniqueObject将是一个不包含重复键值对的新对象。

总结

本文详细介绍了JS数组和对象去重的多种方法,包括reduce()、filter()、Set、Map和unique()。每种方法都有其独特的优势和劣势,您可以根据自己的需求选择最合适的方法。掌握这些去重技巧,可以帮助您编写更简洁、更高效的代码,提高您的编程能力。

延伸阅读