Js数组去重,一个都不能少
2022-12-24 03:56:10
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 方法,可以轻松高效地去除数组中的重复元素,让我们的代码更简洁、高效。