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

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:14:28
字體:
來源:轉載
供稿:網友

方法一:

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

如果有相同的值則跳過,不相同則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數據結構,它類似于數組,其成員的值都是唯一的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 泰兴市| 会宁县| 息烽县| 达州市| 新田县| 连江县| 扬州市| 金塔县| 盐山县| 基隆市| 北川| 商南县| 舟曲县| 本溪| 麻江县| 双桥区| 庐江县| 五河县| 长白| 楚雄市| 通辽市| 广东省| 遂宁市| 双城市| 新邵县| 什邡市| 简阳市| 台前县| 广州市| 通化市| 苏尼特左旗| 博爱县| 阳原县| 澄城县| 乐昌市| 平远县| 永兴县| 沾化县| 惠水县| 朝阳市| 东乌珠穆沁旗|