Javascript數(shù)組去重的幾種方法詳解
更新時間:2021年09月26日 16:22:45 投稿:BJT
下面小編就為大家?guī)硪黄狫avascript數(shù)組去重的幾種方法詳?shù)慕榻B。小編覺得聽錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看
數(shù)組去重
1 雙層for循環(huán)(類似冒泡排序的雙層循環(huán)寫法)
var arr = [2,3,4,2,34,21,1,12,3,4,1] for(var i =0;i<arr.length;i++){ //第一層:每次循環(huán)拿到arr中一個元素 for(var j=i+1;j<arr.length;j++){ //第二層:每次拿到的元素再和每次拿到的元素后邊的元素依次進行比對(因為第一個要從第二個開始比,第二個要從第三個比以此類推,所以這里的j應比i大1為j=i+1) if(arr[i] === arr[j]){ //如果相同就刪除后邊的元素 arr.splice(j,1) } } } //arr:[1, 2, 3, 4, 12, 21, 34]
2 循環(huán)和indexof、循環(huán)和includes
創(chuàng)建新數(shù)組,循環(huán)舊數(shù)組,看每次循環(huán)的元素是否存在于新數(shù)組中沒有就把當前元素添加到新數(shù)組中
//indexof var arr = [2,3,4,2,34,21,1,12,3,4,1] var arr2 = [] arr.forEach((e)=>{ if(arr2.indexOf(e)==-1){ arr2.push(e) } }) console.log(arr2) //arr2:[1, 2, 3, 4, 12, 21, 34]
//includes var arr = [2,3,4,2,34,21,1,12,3,4,1] var arr2 = [] arr.forEach((e)=>{ if(!arr2.includes(e)){ arr2.push(e) } }) console.log(arr2) //arr2:[1, 2, 3, 4, 12, 21, 34]
3 利用對象屬性不能重復去重
var arr = [2,3,4,2,34,21,1,12,3,4,1] var obj = {}; arr.forEach((e,i)=>{ obj[arr[i]] = "abc"; }); var arr2=Object.keys(obj) console.log(arr2) //arr2:["1", "2", "3", "4", "12", "21", "34"] var arr3 = arr2.map(e => ~~e ) //arr3:[1, 2, 3, 4, 12, 21, 34] //注意這種方法不僅給數(shù)組重新排列而且還改變了數(shù)組中元素的類型
~是js里的按位取反操作符,~~就是執(zhí)行兩次按位取反,其實就是保持原值,但是注意雖然是原值,但是對布爾型變量執(zhí)行這個操作,會轉化成相應的數(shù)值型變量,也就是 ~~true === 1,~~false === 0。
4 ES6 Set
ES6 提供了新的數(shù)據(jù)結構 Set。它類似于數(shù)組,但是成員的值都是唯一的,沒有重復的值。
var arr = [2,3,4,2,34,21,1,12,3,4,1] var arr1 = [...new Set(arr)] console.log(arr1) //arr1:[1, 2, 3, 4, 12, 21, 34]
5 ES6 Array. prototype.filter()
注:indexOf在數(shù)組中找元素的時候,碰到符合條件的第一個就會把它的下標返回
var arr = [2,3,4,2,34,21,1,12,3,4,1] var arr2 = arr.filter((e,i)=>{ //看每次循環(huán)的元素在數(shù)組中出現(xiàn)的第一個下標位置(indexOf返回的位置),和每次循環(huán)的元素的下標(filter循環(huán)每次的i)是否一致,一致就說明他就是第一個符合條件,不會被過濾掉。 return arr.indexOf(e)==i; }) console.log(arr2) //arr2:[1, 2, 3, 4, 12, 21, 34]
6 ES6 Array. prototype.reduce()
var arr = [2,3,4,2,34,21,1,12,3,4,1] var arr2 = arr.reduce((pre,e)=>{ //這里當然也可以用indexOf來判斷是否存在 pre.includes(e)?pre:pre.push(e); return pre },[]) console.log(arr2) //arr2:[1, 2, 3, 4, 12, 21, 34]
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!
相關文章
關于javascript中的promise的用法和注意事項(推薦)
這篇文章主要介紹了關于javascript中的promise的用法和注意事項,需要的朋友可以參考下2021-01-01