JavaScript中数组去重常用的五种方法详解

高分请问下,JavaScript中数组去重常用的五种方法详解
最新回答
孤独患者

2025-06-20 21:32:12

在JavaScript中处理数组去重是一个常见需求,以下是五种常用的去重方法及其详细解析:

1. 对象属性(indexOf):通过遍历数组,检查新数组中是否已存在当前元素,若不存在则添加。此方法效率较高,但需额外空间存储新数组。例如:

javascript

const arr = [1,1,1,17,true,true,false,false,true,'a',{},{}];

var newArr = []; arr.forEach((key, index) => {

if (newArr.indexOf(key) === -1) {

newArr.push(key);

}

)

console.log(newArr); // [1, '1', 17, true, false, 'true', 'a', {}, {}]

2. new Set(数组):Set是一种无序且不重复的数据结构,适用于去重操作。此方法简洁高效,但部分旧版本浏览器可能不支持。例如:

javascript

const newArr = [...new Set(arr)];

console.log(newArr); // [1, '1', 17, true, false, 'true', 'a', {}, {}]

3. new Map():利用Map的键值对特性,确保键唯一,从而实现去重。此方法相对复杂,但功能强大。例如:

javascript

const m = new Map();

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

m.set(arr[i], arr[i]);

}

const newArr = [];

m.forEach(function (value, key) {

newArr.push(value);

});

console.log(newArr); // [1, '1', 17, true, false, 'true', 'a', {}, {}]

4. filter() + indexOf:结合filter方法和indexOf方法,确保每个元素仅出现一次。此方法代码简洁,易于理解。例如:

javascript

const newArr = arr.filter(function (item, index, self) {

return self.indexOf(item) === index;

});

console.log(newArr); // [1, '1', 17, true, false, 'true', 'a', {}, {}]

5. reduce() + includes:利用reduce方法和includes方法,构建去重后的数组。此方法时间消耗较高,但灵活度大。例如:

javascript

const newArray = arr.reduce((newArr, element) => {

if (!newArr.includes(element)) {

newArr.push(element);

}

return newArr;

}, []);

总结:在数据量较低时,上述方法差异不大。当数据量超过10000时,前两种方法时间消耗最少,后三种依次增加。推荐使用Set()去重,因其简洁高效。

此外,还有其他一些去重方法,如for嵌套for循环、hasOwnProperty函数、递归等。这些方法虽然也能实现去重,但在实际应用中可能不如上述方法普遍和高效。