本文总结了JavaScript去重的多种方式,各有优缺点,根据需求合理使用吧。
- 使用
for
循环和indexOf
方法,复杂度 O(n^2)
function uniqueArray(arr) {
const result = []
for (let i = 0; i
- 使用
for
循环和对象,复杂度 O(n^2)
function uniqueArray(arr) {
const result = []
const obj = {}
for (let i = 0; i
- 使用
filter
方法和indexOf
方法,复杂度 O(n^2)
function uniqueArray(arr) {
return arr.filter((item, index, arr) => arr.indexOf(item) === index)
}
- 使用
filter
方法和对象,复杂度 O(n)
function uniqueArray(arr) {
const obj = {}
return arr.filter((item) => obj.hasOwnProperty(item) ? false : (obj[item] = true))
}
- 使用
Set
数据结构,复杂度 O(n)
function uniqueArray(arr) {
return Array.from(new Set(arr))
}
// 使用解构 + Set
function uniqueArray(arr) {
return [...new Set(arr)]
}
- 使用
Map
数据结构,复杂度 O(n)
function uniqueArray(arr) {
const map = new Map();
const result = [];
for (let i = 0; i
- 使用双重循环和
splice
方法,复杂度 O(n^2)
function uniqueArray(arr) {
for (var i = 0; i
- 使用排序和双指针
使用排序和双指针可以实现 O(nlogn) 的时间复杂度。先对数组进行排序,然后使用双指针遍历数组,如果左指针和右指针指向的值相同,就把右指针向右移动,直到找到不同的值,然后把左指针向右移动,继续遍历。
function uniqueArray(arr) {
arr.sort();
var left = 0, right = 1;
var result = [];
while (right
- 使用
reduce
方法和includes
,复杂度 O(n^2)
function uniqueArray(arr) {
return arr.reduce(function(prev, cur) {
if (!prev.includes(cur)) {
prev.push(cur);
}
return prev;
}, []);
}
- 使用递归和
includes
,复杂度 O(n^2)
function uniqueArray(arr) {
if (arr.length === 1) {
return arr;
} else {
const first = arr[0];
const rest = uniqueArray(arr.slice(1));
if (rest.includes(first)) {
return rest;
} else {
return [first].concat(rest);
}
}
}
- 双层循环,复杂度 O(n^2)
function uniqueArray(arr) {
var result = [];
for (var i = 0; i
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 聊聊wireshark的进阶使用功能 | 京东云技术团队
数据技术都能四世同堂,凭什么开发 30 岁就要被干掉? 1. 前言 emmm,说起网络知识学习肯定离不来wireshark工具,这个工具能够帮助我们快速地定位网络问题以及帮助正在学习网络协议这块的知识的同学验证理论与实际的一大利器,平时更多的只是停留在初步的使…