返回

剖析数组元素去重的神兵利器——Set方法与Reduce妙用

前端

一、Set方法:简洁至上,一语道破

Set方法是JavaScript内置对象,其成员必须是唯一的,恰好满足数组元素去重的需求。使用Set方法去重,代码简洁明了,一语道破。

const numbers = [1, 2, 3, 4, 5, 1, 2, 3];
const uniqueNumbers = [...new Set(numbers)];
console.log(uniqueNumbers); // 输出:[1, 2, 3, 4, 5]

二、Reduce方法:巧用累加,轻松去重

Reduce方法是JavaScript数组内置方法,可将数组中的元素逐个累加,最终返回一个累积值。巧妙利用Reduce方法的累加特性,即可实现数组元素去重。

const numbers = [1, 2, 3, 4, 5, 1, 2, 3];
const uniqueNumbers = numbers.reduce((acc, curr) => {
  if (!acc.includes(curr)) {
    acc.push(curr);
  }
  return acc;
}, []);
console.log(uniqueNumbers); // 输出:[1, 2, 3, 4, 5]

三、实例拓展:去重实践,代码演练

  1. 去除字符串数组中的重复字符
const names = ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob'];
const uniqueNames = [...new Set(names)];
console.log(uniqueNames); // 输出:[ 'Alice', 'Bob', 'Charlie' ]
  1. 保留对象数组中唯一键值对
const objects = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 1, name: 'Charlie' }];
const uniqueObjects = objects.reduce((acc, curr) => {
  if (!acc.some(obj => obj.id === curr.id)) {
    acc.push(curr);
  }
  return acc;
}, []);
console.log(uniqueObjects); // 输出:[ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' } ]

四、比较对照:Set与Reduce的取舍

Set方法和Reduce方法各有千秋,在不同的场景下,选择合适的方法可以带来事半功倍的效果。

  • Set方法:

    • 优点:简洁明了,易于理解,只需要一行代码即可实现数组元素去重。
    • 缺点:无法自定义去重规则,且Set是无序集合,无法保证元素的顺序。
  • Reduce方法:

    • 优点:可以自定义去重规则,并且可以保留元素的顺序。
    • 缺点:代码相对复杂,可读性略逊于Set方法。

结语

Set方法和Reduce方法是JavaScript中数组元素去重的利器,各有千秋,在不同的场景下发挥着不同的作用。掌握这两种方法,可以帮助您轻松应对数组元素去重的难题,书写出简洁高效的代码。