首页 > 精选问答 >

js数组去重方法

更新时间:发布时间:

问题描述:

js数组去重方法,时间紧迫,求直接说步骤!

最佳答案

推荐答案

2025-07-05 00:07:24

js数组去重方法】在JavaScript开发中,数组去重是一个常见的需求。不同的场景下,我们可以采用多种方式实现数组元素的去重。以下是一些常用的去重方法,并对其优缺点进行了总结。

一、常见JS数组去重方法总结

方法名称 实现方式 是否保留顺序 是否支持对象类型 性能 适用场景
`Set` + `Array.from()` `Array.from(new Set(arr))` 否(仅支持基本类型) 基本数据类型去重
`filter` + `indexOf` `arr.filter((v, i) => arr.indexOf(v) === i)` 简单去重,兼容性好
`reduce` + 对象存储 `arr.reduce((acc, v) => { if (!acc.includes(v)) acc.push(v); return acc; }, [])` 中等 自定义逻辑控制
`filter` + `includes` `arr.filter((v, i) => arr.indexOf(v) === i)` 简单直观
`Object.keys` + `Object.values` `Object.values(Object.fromEntries(arr.map(v => [v, v])))` 现代浏览器支持
`for循环` 使用双重循环对比元素 学习用途或特定逻辑

二、方法详解

1. 使用 `Set`

- 优点:简洁高效,代码量少。

- 缺点:无法处理对象类型的去重,因为 `Set` 比较的是引用地址。

- 示例:

```javascript

const uniqueArr = Array.from(new Set([1, 2, 2, 3]));

```

2. 使用 `filter` + `indexOf`

- 优点:兼容性好,适合旧版本浏览器。

- 缺点:时间复杂度为 O(n²),性能较低。

- 示例:

```javascript

const uniqueArr = arr.filter((v, i) => arr.indexOf(v) === i);

```

3. 使用 `reduce` 和对象存储

- 优点:可以自定义逻辑,灵活度高。

- 缺点:代码略显复杂。

- 示例:

```javascript

const uniqueArr = arr.reduce((acc, v) => {

if (!acc.includes(v)) acc.push(v);

return acc;

}, []);

```

4. 使用 `for` 循环

- 优点:便于理解,适合教学。

- 缺点:代码冗长,效率低。

- 示例:

```javascript

let uniqueArr = [];

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

if (uniqueArr.indexOf(arr[i]) === -1) {

uniqueArr.push(arr[i]);

}

}

```

三、小结

- 如果你只需要对基本类型进行去重,推荐使用 `Set`,它是最简洁和高效的方案。

- 如果你需要保留顺序且需要兼容旧浏览器,可以选择 `filter` 或 `for` 循环。

- 对于对象类型的去重,需要结合 `JSON.stringify` 或自定义比较函数,这超出了本文的范围,但也是实际开发中需要注意的问题。

掌握这些方法后,你可以根据项目需求选择最合适的方式,提升代码的可读性和性能。

免责声明:本答案或内容为用户上传,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。 如遇侵权请及时联系本站删除。