JavaScript--数组去重
数组去重
-
通过es6的集合对象Set来实现去重
<pre>let arr=[1,2,3,4,5,6,1,2,3]; function unique(arr){ return Array.from(new Set(arr)) }; console.log(unique(arr)); <pre>
Set对象是一组不重复的值,重复的值会被忽略,new Set(arr)得到Set(6)[1,2,3,4,5,6]
数组的from方法用于通过拥有 length 属性的对象或可迭代的对象来返回一个数组。如果对象是数组返回 true,否则返回 false。
from方法有三个参数,第一个参数为需要转化的对象,第二个参数是每个元素调用的函数,第三个参数指定第二个元素函数的this对象,Array.from('123',x=>x*10) ==> Array(3)[10,20,30]
高级点写法:return [...new Set(arr)] -
通过es5常用的嵌套for循环实现,i,j两个指针分别指向两个值,首先取得数组的第一个值arr[i],然后从数组第二个值开始遍历arr[j],如果遇到相等的数值,说明这两个值重复,然后数组的splice方法删除遇到的相等的值,同时把j指针后退1位,因为删除了元素后,再次遍历的值应该还是在该位置,直到完成循环。
function unique(arr){ for (let i = 0; i < arr.length; i++) { for (let j = i+1; j < arr.length; j++) { if(arr[i]==arr[j]){ arr.splice(j,1) j-- } } } return arr } console.log(unique(arr))
splice方法用于添加或删除数组中的元素。
splice()有三个参数,第一个参数为必需,该参数必须是数字,表示删除或者添加元素的下标,第二个参数是删除元素的个数,第三个以及之后为添加的元素 -
首先定义一个空数组,遍历需要去重的数组,每一项和空数组中的元素对比,如果存在,就继续遍历,不存在就放入到定义的数组
function unique(arr){ let array=[] for (let i = 0; i < arr.length; i++) { if(array.indexOf(arr[i])=== -1){ array.push(arr[i]) } } return array } console.log(unique(arr))
indexOf()返回数组中指定元素的下标,如果数组中不存在就返回-1,第一个参数为查找的元素,第二个参数规定开始索引的位置,它的合法取值是 0 到 stringObject.length - 1
-
利用filter()方法创建一个新数组,数组中的元素是对指定数组中进行判断符合条件的项,
function unique(arr){ return arr.filter(function(item,index,arr){ return arr.indexOf(item,0)===index }) } console.log(unique(arr))
array.filter(function(currentValue,index,arr), thisValue)
filter()有两个参数,第一个参数为对指定数组判断的条件,函数,指定数组中的每一项都必须执行该函数,currentValue(必须。当前元素的值),第二个参数thisValue,可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。如果省略了 thisValue ,"this" 的值为 "undefined"
当前元素的下标等于arr.indexOf(item,0)时,返回该元素,若不相等,说明该元素重复,不用返回。