JS数组扁平化、去重、排序操作实例详解
本文实例讲述了JS数组扁平化、去重、排序操作。分享给大家供大家参考,具体如下:
在网上看到一个校招题目,已知一个数组vararr=[[1,3,2,1],[5,3,4,8,5,6,5],[6,2,8,9,[4,11,15,8,9,12,[12,13,[10],14]]],16],用js编写一个程序将这个数组扁平化,并得到一个升序且无重复值的数组。得到最终结果为:[1,2,3,4,5,6,8,9,10,11,12,13,14,15,16]。下面对数组扁平化、去重和排序就行总结。
vararr=[[1,3,2,1], [5,3,4,8,5,6,5], [6,2,8,9,[4,11,15,8,9,12,[12,13,[10],14]]], 16]
1、扁平化方法一(toString)
注意:如果arr数组中有空数组,不使用此方法,用下面的方法;同时得到数组的值是字符串,不是数字
varnewArr=arr.toString().split(',')
2、扁平化方法二(正则表达式)
varnewArr1=JSON.parse("["+JSON.stringify(arr).replace(/(\[\]\,)|[\[\]]*/g,"")+"]");
3、扁平化方法三(reduce)
reduce()方法对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值,reduce详细介绍
functionflatten(arr){ returnarr.reduce((a,b)=>[].concat(Array.isArray(a)&&a?flatten(a):a,Array.isArray(b)&&b?flatten(b):b),[]) } varnewArr2=flatten(arr)
4、扁平化方法四(遍历数组)
varnewArr3=[] functionflat(arr){ for(vari=0;i二、数组去重 varnewArr1=[1,3,2,1,5,3,4,8,5,6,5,6,2,8,9,4,11,15,8,9,12,12,13,10,14,16]1、去重方法一(Set)
Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-likeobject)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)。
ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值;Set详细介绍varduplicate=Array.from(newSet(newArr1))2、去重方法二(reduce)
通过数组reduce方法,利用indexOf判断上一次回调返回数组a中是否包含当前元素b的索引,如果不存在,则把b元素加入a数组,否则直接返回a。
varduplicate1=newArr1.reduce((a,b)=>{ if(a.indexOf(b)===-1){ a.push(b) } returna },[])3、去重方法三(数组下标去重法)
通过数组的过滤filter方法,利用indexOf获取当前元素ele在被过滤数组farr中的第一个索引值,如果值与当前索引值index相等则返回,如果不相等则过滤。
varduplicate2=newArr1.filter((ele,index,farr)=>{ returnfarr.indexOf(ele)===index })4、去重方法四(遍历数组)
遍历数组,建立新duplicate3数组,利用indexOf判断元素是否存在于duplicate3新数组中,不存在则push到duplicate3新数组。
varduplicate3=[] for(vari=0;i5、去重方法五(排序后相邻去重法)
给传入数组排序,排序后相同值相邻,然后遍历时新数组只加入不与前一值重复的值。
functionunique3(arr){ arr.sort(); varnewArr=[arr[0]]; for(vari=1,len=arr.length;i三、数组排序 varduplicate=[1,3,2,5,4,8,6,9,11,15,12,13,10,14,16]1、排序方法一:(sort方法)
functionsystemSort(arr){ returnarr.sort(function(a,b){ returna-b }) } varsort=systemSort(duplicate)2、排序方法二:(冒泡排序)
functionbubbleSort(arr){ varlen=arr.length for(vari=len-1;i>0;i--){ for(varj=0;jarr[j+1]){ vartmp=arr[j] arr[j]=arr[j+1] arr[j+1]=tmp } } } returnarr } varsort1=bubbleSort(duplicate)3、排序方法三:(插入排序)
functioninsertSort(arr){ vartmp for(vari=1;i=0;j--){ if(arr[j-1]>tmp){ arr[j]=arr[j-1]; }else{ arr[j]=tmp; break; } } } returnarr } varsort2=insertSort(duplicate) 排序方法还有很多,这里不进行一一总结,可以参考前端面试必备——基本排序算法
四、数组扁平化、去重、排序实例演示
数组扁平化、去重、排序
感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。
更多关于JavaScript相关内容还可查看本站专题:《JavaScript数组操作技巧总结》、《JavaScript字符与字符串操作技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。