📅  最后修改于: 2023-12-03 15:22:43.502000             🧑  作者: Mango
在实际开发中,我们经常需要去掉数组中的重复项。在Javascript中,有多种方法可以实现这个功能。本文将介绍其中的三种方法。
Set是一种ES6新增的数据结构,它可以用来存储任何类型的唯一值,包括基本类型和对象引用。利用Set的功能,我们可以轻松地去重一个数组。
const arr = [1, 2, 3, 1, 2, 4];
const newArr = Array.from(new Set(arr));
console.log(newArr); // [1, 2, 3, 4]
在上面的代码中,我们先将数组转换为Set,然后将Set转换为数组。这样就去掉了数组中的重复项。需要注意的是,Set是ES6新增的数据结构,低版本的浏览器可能不支持。
另一种实现方式是使用indexOf方法。该方法可以返回给定元素在数组中第一次出现的位置,如果没有找到,则返回-1。我们可以利用这个特性,遍历数组,并判断是否已经在新数组中出现过。
const arr = [1, 2, 3, 1, 2, 4];
const newArr = [];
for (let i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i]);
}
}
console.log(newArr); // [1, 2, 3, 4]
在上面的代码中,我们首先创建了一个空数组newArr,然后遍历原数组arr,如果当前元素在newArr中没有出现过,则将其加入newArr。需要注意的是,indexOf方法的运行时间与数组长度成正比,所以这种方法的时间复杂度为O(n^2)。
ES6中还提供了另一个方法includes,其功能与indexOf类似。不同之处在于,includes返回的是布尔值,表示给定元素是否在数组中出现过。我们可以利用这个特性,将上面的代码做一些改进。
const arr = [1, 2, 3, 1, 2, 4];
const newArr = [];
for (let i = 0; i < arr.length; i++) {
if (!newArr.includes(arr[i])) {
newArr.push(arr[i]);
}
}
console.log(newArr); // [1, 2, 3, 4]
在上面的代码中,我们用!newArr.includes(arr[i])代替了newArr.indexOf(arr[i]) === -1。这样可以写得更加简洁,同时也提高了代码的可读性。
本文介绍了三种在Javascript中去重数组的方法:使用Set、indexOf和includes。这些方法各有特点,在实际开发中,可以根据需要选择合适的方法。还需要注意的是,这些方法都会创建新数组,原数组不会发生修改。