玖叶教程网

前端编程开发入门

11种数组去重方法,值得你收藏!(数组去重的5种方法前端)

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)] // 对于不想多写代码的人来说,这么一句就够了!

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

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

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言