首页 > 代码编程 > 前端开发 > js 删除数组(JavaScript实现数组去重)

js 删除数组(JavaScript实现数组去重)

2023-07-10 前端开发 26 ℃ 0 评论

什么是数组去重

数组去重就是在一个数组中,删除重复的元素,只保留其中唯一的元素。

这个操作可以让我们更有效地使用数组,减少不必要的重复元素以提高性能。

传统的数组去重方法

以往通常使用的数组去重方法是通过遍历数组,将重复的元素删除。

function unique(arr) {

for (var i = 0; i < arr.length; i++) {

for (var j = i + 1; j < arr.length; j++) {

if (arr[i] === arr[j]) {

arr.splice(j, 1);

j--;

}

}

}

return arr;

}

这个方法是使用双重循环,每次比较相邻的两个元素,如果发现重复元素,就使用splice方法删除掉。

这种方法看起来简单,但是效率很低,因为每删除一个元素,整个数组就会重新排序,导致时间复杂度为O(n^2)。

使用Set方法去重

ES6提供了更优雅的数组去重方法,就是使用Set数据结构来解决问题。

function unique(arr) {

return Array.from(new Set(arr));

}

这个方法看起来非常简单,它把数组传递给一个Set对象,自动删除副本,然后使用Array.from方法将Set对象转换为数组。

ES6新增的Set对象,可以自动删除重复的元素,并且它是按照插入顺序排序的。

使用reduce方法去重

另一个优雅的去重方法是通过reduce方法。

function unique(arr) {

return arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);

}

这个方法使用了ES6的箭头函数和扩展语法,它首先将初始值设置为一个空数组,然后遍历每个元素,如果它在结果数组中已经存在,就忽略之,否则就把它添加到结果数组中。

由于reduce方法遍历整个数组,时间复杂度为O(n),并且代码非常简洁优雅。

使用filter方法去重

第四个去重方法使用了ES6的filter方法。

function unique(arr) {

return arr.filter((value, index, array) => array.indexOf(value) === index);

}

这个方法的原理是遍历数组,并使用indexOf方法查找元素在数组中的位置,如果该位置和当前索引值相同,则说明该元素是唯一的,可以保留。

尽管这种方法比较简洁,但是在处理大规模数据时,性能会受到影响。

总结

虽然传统的去重方法很简单易懂,但是效率较低。现在我们有了更加优雅的ES6解决方案,包括Set、reduce和filter方法。

这些方法可以让我们更快更有效地实现数组去重操作,从而提高我们代码的性能。

炮渣日记