国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS實現數組去重方法總結(六種方法)

2019-11-19 16:04:59
字體:
來源:轉載
供稿:網友

方法一:

雙層循環,外層循環元素,內層循環時比較值

如果有相同的值則跳過,不相同則push進數組

Array.prototype.distinct = function(){ var arr = this,  result = [],  i,  j,  len = arr.length; for(i = 0; i < len; i++){  for(j = i + 1; j < len; j++){   if(arr[i] === arr[j]){    j = ++i;   }  }  result.push(arr[i]); } return result;}var arra = [1,2,3,4,4,1,1,2,1,1,1];arra.distinct();    //返回[3,4,2,1]

方法二:利用splice直接在原數組進行操作

雙層循環,外層循環元素,內層循環時比較值

值相同時,則刪去這個值

注意點:刪除元素之后,需要將數組的長度也減1.

Array.prototype.distinct = function (){ var arr = this,  i,  j,  len = arr.length; for(i = 0; i < len; i++){  for(j = i + 1; j < len; j++){   if(arr[i] == arr[j]){    arr.splice(j,1);    len--;    j--;   }  } } return arr;};var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];var b = a.distinct();console.log(b.toString()); //1,2,3,4,5,6,56

優點:簡單易懂

缺點:占用內存高,速度慢

方法三:利用對象的屬性不能相同的特點進行去重

Array.prototype.distinct = function (){ var arr = this,  i,  obj = {},  result = [],  len = arr.length; for(i = 0; i< arr.length; i++){  if(!obj[arr[i]]){ //如果能查找到,證明數組元素重復了   obj[arr[i]] = 1;   result.push(arr[i]);  } } return result;};var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];var b = a.distinct();console.log(b.toString()); //1,2,3,4,5,6,56

方法四:數組遞歸去重

運用遞歸的思想

先排序,然后從最后開始比較,遇到相同,則刪除

Array.prototype.distinct = function (){ var arr = this,  len = arr.length; arr.sort(function(a,b){  //對數組進行排序才能方便比較  return a - b; }) function loop(index){  if(index >= 1){   if(arr[index] === arr[index-1]){    arr.splice(index,1);   }   loop(index - 1); //遞歸loop函數進行去重  } } loop(len-1); return arr;};var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,56,45,56];var b = a.distinct();console.log(b.toString());  //1,2,3,4,5,6,45,56

方法五:利用indexOf以及forEach

Array.prototype.distinct = function (){ var arr = this,  result = [],  len = arr.length; arr.forEach(function(v, i ,arr){  //這里利用map,filter方法也可以實現  var bool = arr.indexOf(v,i+1);  //從傳入參數的下一個索引值開始尋找是否存在重復  if(bool === -1){   result.push(v);  } }) return result;};var a = [1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,1,23,1,23,2,3,2,3,2,3];var b = a.distinct();console.log(b.toString()); //1,23,2,3

方法六:利用ES6的set

Set數據結構,它類似于數組,其成員的值都是唯一的。

利用Array.from將Set結構轉換成數組

function dedupe(array){ return Array.from(new Set(array));}dedupe([1,1,2,3]) //[1,2,3]

拓展運算符(...)內部使用for...of循環

let arr = [1,2,3,3];let resultarr = [...new Set(arr)]; console.log(resultarr); //[1,2,3]

下面給大家補充介紹合并數組并去重的方法

一、concat()方法

思路:concat() 方法將傳入的數組或非數組值與原數組合并,組成一個新的數組并返回。該方法會產生一個新的數組。

function concatArr(arr1, arr2){  var arr = arr1.concat(arr2);  arr = unique1(arr);//再引用上面的任意一個去重方法  return arr;}

二、Array.prototype.push.apply()

思路:該方法優點是不會產生一個新的數組。

 var a = [1, 2, 3]; var b = [4, 5, 6]; Array.prototype.push.apply(a, b);//a=[1,2,3,4,5,6] //等效于:a.push.apply(a, b); //也等效于[].push.apply(a, b);  function concatArray(arr1,arr2){   Array.prototype.push.apply(arr1, arr2);   arr1 = unique1(arr1);   return arr1; }

總結

以上所述是小編給大家介紹的JS實現數組去重方法總結(六種方法),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 襄垣县| 互助| 余干县| 长垣县| 汉寿县| 马边| 内丘县| 金寨县| 靖宇县| 措美县| 武汉市| 台湾省| 大余县| 三明市| 汪清县| 西盟| 竹北市| 筠连县| 黄石市| 农安县| 镇雄县| 禄丰县| 东台市| 昌图县| 绥江县| 金坛市| 西平县| 锡林郭勒盟| 津市市| 保亭| 潞城市| 阳江市| 锡林郭勒盟| 庆元县| 广州市| 潮安县| 布拖县| 黑山县| 兴仁县| 扎鲁特旗| 南江县|