javascript之九种数组去重的方法
2018-09-19 11:14
162 查看
数组去重,第一反应就是for循环,如果一个for循环解决不了,那就多来几个。。。哈哈,心血来潮查了下数组去重的方法,是我见识短浅。以下,我将介绍九种js中数组去重的方法:
- 利用 ES6 Set去重
- 利用splice()去重
- 利用indexOf()去重
- 利用sort()去重
- 利用 对象的属性不能相同的特性进行数组去重
- 利用includes()
- 利用hasOwnProperty()去重
- 利用递归去重
- 利用Map数据结构去重
利用ES6 Set()去重:
/*ES6 Set()方法数组去重*/ function unique(arr) { //from()是将Set()数据结构转换为数组类型 //Set()数据结构类似于数组,但不同的是Set()成员值唯一 return Array.from(new Set(arr)); } var arr =[1,1,2,3,4,4]; console.log(unique(arr));
控制台输出结果如下:
利用splice()去重:
function unique1(arr) { for(var i = 0; i < arr.length; i++){ for(var j = i+1; j < arr.length; j++){ if(arr[i]==arr[j]){ arr.splice(j,1); //splice(j,1, )替换的值是空 j--; } } } return arr; } console.log(unique1(arr));
输出结果和上例结果一致,在这里需要注意的是splice(),它的本质是splice(index,len,[item]),index是数组开始下标,len替换删除元素的长度,[item]替换的值。
利用indexOf()去重:
function unique2(arr) { /* 思路:1,创建新的空数组; * 2,for循环遍历去重的数组; * 3,indexOf()查询遍历出的数组在新的数组是否出现,如果出现则继续遍历,如果未出现,则利用push方法添加到数组里*/ var arr1 = []; for(var i = 0; i < arr.length; i++){ if(arr1.indexOf(arr[i]) == -1){ arr1.push(arr[i]); } } return arr1; } var array = [4,5,6,77,8,8,,77,5]; console.log(unique2(array));
注:indexOf()返回值,如果匹配到返回1,未匹配到返回-1。
控制台输出:
利用sort()去重:
/*利用sort()去重*/ function unique3(arr){ arr = arr.sort(); var array = [arr[0]]; for(var i = 1; i < arr.length; i++){ //因为不是从第一个元素开始的,所以i的初始值不能为0. if(arr[i] !== arr[i-1]){ array.push(arr[i]); } } return array; } var arr3 = [11,33,66,8,8,5,33,11]; console.log(unique3(arr3));
控制台输出结果:
利用 对象的属性不能相同的特性进行数组去重:
/*利用 对象的属性不能相同的特性进行数组去重*/ function unique4(arr){ var array = []; var obj = {}; for(var i = 0; i < arr.length; i++){ if(!obj[arr[i]]){ array.push(arr[i]); obj[arr[i]] = 1; }else{ obj[arr[i]]++; } } return array; } var arr4 = ['a','a','b','c','n','d','d','s','n']; console.log(unique4(arr4));
控制台输出结果:
利用includes()去重:
/*利用includes()去重*/ function unique5(arr) { var array = []; for(var i = 0; i < arr.length; i++){ if(!array.includes(arr[i])){ array.push(arr[i]); } } return array; } var arr5 = [100,50,45,90,100,4,50]; console.log(unique5(arr5));
控制台输出结果:
利用hasOwnProperty()去重:
/*利用hasOwnProperty()去重*/ function unique6(arr) { /*hasOwnProperty去重:判断对象是否有某个特定的属性,必须用字符串指定该属性。*/ var obj = {}; /*filter()对数组中每个元素都执行一次指定的函数(callback()),并创建一个新的数组*/ return arr.filter(function (item,index,arr) {return obj.hasOwnProperty(typeof item + item)?false:(obj[typeof item + item] = true) }) //callback(当前元素,当前元素索引,当前元素数组对像) } var arr6 = [200,200,300,100,100,290,300]; console.log(unique6(arr6));
控制台输出结果:
利用递归去重:
/*利用递归去重*/ function unique7(arr) { var arry = arr; var len = arry.length; arry.sort(function (a,b) {return a - b;}) function loop(index){ if(index >= 1){ if(arry[index]===arry[index - 1]){ arry.splice(index,1); } loop(index - 1); } } loop(len - 1); return arry; } var arr7 =[1,2,4,5,6,6,5,4,2]; console.log(unique7(arr7)); 控制台输出结果:
利用Map数据结构去重:
/*利用map数据结构去重*/ function unique8(arr) { var map = new Map(); var array = new Array(); for(var i = 0; i < arr.length; i++){ if(map.has(arr[i])){ map.set(arr[i],true); }else{ map.set(arr[i],false); array.push(arr[i]); } } return array; } var arr8 = [1,1,1,2,2,2,3,3,3]; console.log(unique8(arr8)); 控制台输出结果:
阅读更多
相关文章推荐
- javascript数组定义的几种方法
- 【转】 JavaScript中Array(数组)的属性和方法
- JavaScript实现将数组数据添加到Select下拉框的方法
- 6个Javascript数组实用的原型扩展方法
- javascript数组5个常用方法详解
- php实现向javascript传递数组的方法
- javaScript array(数组)使用字符串作为数组下标的方法
- javascript实现数组去重的多种方法
- JavaScript 数组方法之 copyWithin
- JavaScript中的数组的join()方法的理解使用
- JavaScript数组去重的3种方法和代码实例
- javascript中创建数组的方法
- javascript创建数组之联合数组的使用方法示例
- javascript数组之方法(一)
- javascript数组操作大全,数组方法总汇
- Javascript中数组的sort()和reverse()方法
- JavaScript比较运算符及5个重要的数组方法
- Javascript中数组方法汇总
- javascript数组去重的三种常用方法,及其性能比较
- Javascript中数组方法和方法的扩展