搜索
写经验 领红包
 > 自然

数组去重简单(数组去重的几种方法)

导语:11种数组去重方法,值得你收藏!

数组去重最简单(数组去重的几种方法)

Question : 现在有一个字符数组 :

let arr = ["盆","盆","学","I","T","越","学","越","牛","B","!"];

你有几种方法去除数组中重复的内容呢?

方法一 ES6 Set去重

let arr = ["盆", "盆", "学", "I", "T", "越", "学", "越", "牛", "B", "!"];function uniqueArray(arr) { return Array.from(new Set(arr))}console.log(uniqueArray(arr)); //[ '盆', '学', 'I', 'T', '越', '牛', 'B', '!' ]

方法二 for循环+ splice去重

let arr = ["盆", "盆", "学", "I", "T", "越", "学", "越", "牛", "B", "!"];function uniqueArray(arr) { for (let i = 0; i < arr.length; i++) { for (let j = i + 1; j < arr.length; j++) { if (arr[j] === arr[i]) { arr.splice(j, 1); j--; } } } return arr}console.log(uniqueArray(arr)); // [ '盆', '学', 'I', 'T', '越', '牛', 'B', '!' ]

想想:如果我写成如下的形式,会有什么问题?

function uniqueArray(arr) { let len = arr.length; for (let i = 0; i < len; i++) { for (let j = i + 1; j < len; j++) { if (arr[j] === arr[i]) { arr.splice(j, 1); j--; } } } return arr}

方法三 indexOf 去重

let arr = ["盆", "盆", "学", "I", "T", "越", "学", "越", "牛", "B", "!"];function uniqueArray(arr) { if (!Array.isArray(arr)) { console.log('type error!'); return; } var array = []; for (var i = 0; i < arr.length; i++) { if (array.indexOf(arr[i]) === -1) { array.push(arr[i]) } } return array;}console.log(uniqueArray(arr)); // [ '盆', '学', 'I', 'T', '越', '牛', 'B', '!' ]

方法四 利用sort()函数去重

let arr = ["盆", "盆", "学", "I", "T", "越", "学", "越", "牛", "B", "!"];// 利用sort()排序方法,然后根据排序后的结果进行遍历及相邻元素比对function uniqueArray(arr) { if (!Array.isArray(arr)) { console.log('type error!') return; } arr = arr.sort() var arrry= [arr[0]]; for (var i = 1; i < arr.length; i++) { if (arr[i] !== arr[i-1]) { arrry.push(arr[i]); } } return arrry;}console.log(uniqueArray(arr)); // [ '盆', '学', 'I', 'T', '越', '牛', 'B', '!' ]

方法五 利用includes

let arr = ["盆", "盆", "学", "I", "T", "越", "学", "越", "牛", "B", "!"];function uniqueArray(arr) { var array =[]; //includes 检测数组是否有某个值 for(var i = 0; i < arr.length; i++) { if( !array.includes( arr[i]) ) { array.push(arr[i]); } } return array}console.log(uniqueArray(arr)); // [ '盆', '学', 'I', 'T', '越', '牛', 'B', '!' ]

方法六 利用 filter + hasOwnProperty

let arr = ["盆", "盆", "学", "I", "T", "越", "学", "越", "牛", "B", "!"];function uniqueArray(arr) { var obj = {}; return arr.filter(function(item){ return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true) })}console.log(uniqueArray(arr)); // [ '盆', '学', 'I', 'T', '越', '牛', 'B', '!' ]

方法七 利用 filter + indexOf

let arr = ["盆", "盆", "学", "I", "T", "越", "学", "越", "牛", "B", "!"];function uniqueArray(arr) { return arr.filter(function(item, index, arr) { //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素 return arr.indexOf(item,0) === index; });}console.log(uniqueArray(arr)); // [ '盆', '学', 'I', 'T', '越', '牛', 'B', '!' ]

方法八 递归法

let arr = ["盆", "盆", "学", "盆", "I", "T", "越", "学", "越", "牛", "B", "!"];

function uniqueArray(arr) {

let array = arr;

let len = array.length;

array.sort();//首先排序,相同元素在一起,方便后续递归去重

function loop(index) {

if (index >= 1) {

if (array[index] === array[index - 1]) {

array.splice(index, 1);

}

loop(index - 1); //递归loop

}

}

loop(len - 1);

return array;

}

console.log(uniqueArray(arr)); // [ '!', 'B', 'I', 'T', '学', '牛', '盆', '越' ]

方法九 Map数据结构去重

let arr = ["盆", "盆", "学", "盆", "I", "T", "越", "学", "越", "牛", "B", "!"];function uniqueArray(arr) { let map = new Map(); let array = [] // 数组用于返回结果 for (let i = 0; i < arr.length; i++) { if (map.has(arr[i])) { // 如果有该key值 map.set(arr[i], true); } else { map.set(arr[i], false); // 如果没有该key值 array.push(arr[i]); } } return array;}console.log(uniqueArray(arr)); // [ '盆', '学', 'I', 'T', '越', '牛', 'B', '!' ]

方法十 reduce+includes

let arr = ["盆", "盆", "学", "盆", "I", "T", "越", "学", "越", "牛", "B", "!"];function uniqueArray(arr) { return arr.reduce((prev,cur) => prev.includes(cur) ? prev : [...prev,cur]);}console.log(uniqueArray(arr)); // [ '盆', '学', 'I', 'T', '越', '牛', 'B', '!' ]

方法十一 懒人法

[...new Set(arr)] // 对于不想多写代码的人来说,这么一句就够了!

这么多种方法,你都学会了吗?

你还有什么更好的方法,欢迎留言讨论吧!

本文内容由小茹整理编辑!