返回

Js数组去重,一个都不能少

前端

Js 数组去重大法:一个都不能少

在 JavaScript 开发中,数组是我们不可或缺的好帮手。它可以容纳各种元素,凭借下标索引,我们能轻松取用它们。然而,在现实应用中,数组元素经常出现重复的情况,这不仅会让代码逻辑混乱,还可能拖慢运行效率。因此,掌握 JavaScript 数组去重的技巧至关重要。

Set 结构:一键去重

Set 是 ES6 中引入的一种神奇数据结构,它天生具备自动去除重复元素的能力。使用 Set 去重数组非常简单:先将数组元素转换成 Set,再将 Set 转换成数组,就能得到一份不含重复元素的新数组。

const array = [1, 2, 3, 4, 5, 1, 2, 3];
const set = new Set(array);
const uniqueArray = [...set];

console.log(uniqueArray); // [1, 2, 3, 4, 5]

indexOf 和 filter:精准过滤

indexOf() 方法能找出某个元素在数组中的首次出现位置,如果没有找到,则返回 -1。filter() 方法则可以根据特定条件过滤数组元素,并返回一个新数组。巧妙结合这两个方法,我们就能实现数组去重。

const array = [1, 2, 3, 4, 5, 1, 2, 3];
const uniqueArray = array.filter((item, index) => {
  return array.indexOf(item) === index;
});

console.log(uniqueArray); // [1, 2, 3, 4, 5]

sort 和 reduce:巧妙合并

sort() 方法可以对数组元素进行排序,reduce() 方法则可以将数组元素累积成一个单一值。巧妙地结合这两个方法,我们也能实现数组去重。

const array = [1, 2, 3, 4, 5, 1, 2, 3];
const uniqueArray = array.sort().reduce((acc, item) => {
  if (acc.length === 0 || acc[acc.length - 1] !== item) {
    acc.push(item);
  }
  return acc;
}, []);

console.log(uniqueArray); // [1, 2, 3, 4, 5]

其他去重方法

除了上述方法,还有一些其他方法也能实现数组去重:

  • 使用循环和条件语句
  • 使用对象键值对
  • 使用 lodash 库

这些方法各有优劣,可以根据具体情况选择使用。

常见问题解答

1. 去重后数组的顺序会改变吗?

使用 Set 结构和 sort + reduce 方法会改变数组顺序,而使用 indexOf + filter 方法不会改变顺序。

2. 如何去重多维数组?

可以使用递归或 JSON.stringify() + JSON.parse() 的方法将多维数组转换成一维数组,再进行去重。

3. 如何去重对象数组?

可以根据对象的某个属性进行去重,或使用 lodash 库的 _.uniqBy() 方法。

4. 去重时如何忽略大小写或空格?

可以使用 String.toLowerCase() 或 String.trim() 方法先将元素转换成相同格式,再进行去重。

5. 如何去重NaN?

NaN 是一个特殊值,不能与自身相等,因此可以使用 isNaN() 方法判断并过滤 NaN。

结论

掌握 JavaScript 数组去重技巧对于提升代码质量至关重要。熟练运用 Set 结构、indexOf + filter 和 sort + reduce 方法,可以轻松高效地去除数组中的重复元素,让我们的代码更简洁、高效。