JS数组去重的5种算法实现
1. 利用Set数据结构
使用Set数据结构是JS中去重最简单的方法,它可以快速对数组进行去重,这种方式不需要对原数组进行操作,不会改变原数组。
let arr = [1, 1, 2, 3, 2, 4, 5, 5];
let uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // [1, 2, 3, 4, 5]
这里用了ES6的扩展运算符将Set转成数组。
2. 利用indexOf
使用indexOf的方式比较适合对于基本数据类型进行去重,因为引用类型的数据indexOf方法无法正确比较,需要转成字符串再进行比较。这种方式同样不会改变原数组。
let arr = [1, 1, 2, 3, 2, 4, 5, 5];
let uniqueArr = [];
for (let i = 0; i < arr.length; i++) {
if (uniqueArr.indexOf(arr[i]) === -1) {
uniqueArr.push(arr[i]);
}
}
console.log(uniqueArr); // [1, 2, 3, 4, 5]
3. 利用includes
includes方法也类似于indexOf,只不过它返回的是布尔值,需要做一个判断。同样,它也不会改变原数组。
let arr = [1, 1, 2, 3, 2, 4, 5, 5];
let uniqueArr = [];
for (let i = 0; i < arr.length; i++) {
if (!uniqueArr.includes(arr[i])) {
uniqueArr.push(arr[i]);
}
}
console.log(uniqueArr); // [1, 2, 3, 4, 5]
4. 利用排序
排序可以将相同的元素放到一起,这样再遍历数组时就可以只与相邻的元素比较了。但是需要注意,这种方式会改变原数组。
let arr = [1, 1, 2, 3, 2, 4, 5, 5];
arr.sort();
let uniqueArr = [arr[0]];
for (let i = 1; i < arr.length; i++) {
if (arr[i] !== arr[i - 1]) {
uniqueArr.push(arr[i]);
}
}
console.log(uniqueArr); // [1, 2, 3, 4, 5]
5. 利用Object键值对
利用Object的键值对来记录数组元素是否出现过,这种方式同样不会改变原数组。
let arr = [1, 1, 2, 3, 2, 4, 5, 5];
let uniqueArr = [];
let obj = {};
for (let i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
obj[arr[i]] = 1;
uniqueArr.push(arr[i]);
}
}
console.log(uniqueArr); // [1, 2, 3, 4, 5]
以上就是五种JS数组去重的实现方法,各有优缺点,可以根据实际情况进行选择。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js数组去重的5种算法实现 - Python技术站