欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js數(shù)組去重的方法總結(jié)

 更新時間:2019年01月18日 12:03:48   作者:muzidigbig  
今天小編就為大家分享一篇關(guān)于js數(shù)組去重的方法總結(jié),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

一、普通的方法去重

1、簡單的去重方法

// 最簡單數(shù)組去重法
/*
* 新建一新數(shù)組,遍歷傳入數(shù)組,值不在新數(shù)組就push進該新數(shù)組中
* IE8以下不支持數(shù)組的indexOf方法
*/
function uniq(array){
  var temp = []; //一個新的臨時數(shù)組
  for(var i = 0; i < array.length; i++){
    if(temp.indexOf(array[i]) == -1){
      temp.push(array[i]);
    }
  }
  return temp;
}
var newArray = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log(uniq(newArray));// [1, 2, 4, 9, 6, 7, 5, 3]
/*
var newArray = ['mu','zi','dig','big','z','mu','zi','muzidigbig']
console.log(uniq(newArray));//["mu", "zi", "dig", "big", "z", "muzidigbig"]
*/

2、數(shù)組下標法

/*
* 還是得調(diào)用“indexOf”性能跟方法1差不多,
* 實現(xiàn)思路:如果當前數(shù)組的第i項在當前數(shù)組中第一次出現(xiàn)的位置不是i,
* 那么表示第i項是重復的,忽略掉。否則存入結(jié)果數(shù)組。
*/
function uniq(array){
  var temp = [];
  for(var i = 0; i < array.length; i++) {
    //如果當前數(shù)組的第i項在當前數(shù)組中第一次出現(xiàn)的位置是i,才存入數(shù)組;否則代表是重復的
    if(array.indexOf(array[i]) == i){
      temp.push(array[i])
    }
  }
  return temp;
}
var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));//[1, 2, "2", 4, 9, "a", 3, 5, 6]

3、排序后相鄰去除法

/*
* 給傳入數(shù)組排序,排序后相同值相鄰,
* 然后遍歷時,新數(shù)組只加入不與前一值重復的值。
* 會打亂原來數(shù)組的順序
*/
function uniq(array){
  array.sort();
  console.log(array.sort());
  var temp=[array[0]];
  for(var i = 1; i < array.length; i++){
    if( array[i] !== temp[temp.length-1]){
      temp.push(array[i]);
    }
  }
  return temp;
}
var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));//[1, "2", 2, 3, 4, 5, 6, 9, "a"]

4、優(yōu)化遍歷數(shù)組法

// 思路:獲取沒重復的最右一值放入新數(shù)組
/*
* 推薦的方法
* 方法的實現(xiàn)代碼相當酷炫,
* 實現(xiàn)思路:獲取沒重復的最右一值放入新數(shù)組。
* (檢測到有重復值時終止當前循環(huán)同時進入頂層循環(huán)的下一輪判斷)
*/
function uniq(array){
  var temp = [];
  var index = [];
  var l = array.length;
  for(var i = 0; i < l; i++) {
    for(var j = i + 1; j < l; j++){
      if (array[i] === array[j]){
        i++;
        j = i;
      }
    }
    temp.push(array[i]);
    index.push(i);
  }
  console.log(index);//[0, 2, 5, 6, 7, 8, 9]
  return temp;
}
var aa = [1,2,2,3,5,3,6,5,'3','muzi'];
console.log(uniq(aa));// [1, 2, 3, 6, 5, "3", "muzi"]

5.數(shù)組includes()去重

//利用數(shù)組原型對象上的includes方法
function unique(arr){
 var bArr= [];
 for(var i=0; i<arr.length; i++){
  if( !bArr.includes(arr[i]) ){ // 如果bArr新數(shù)組包含當前循環(huán)item
   bArr.push(arr[i]);
  }
 }
 return bArr;
}
var aa = [1,2,2,3,5,3,6,5,'3','muzi'];
console.log(unique(aa))//[1, 2, 3, 5, 6, "3", "muzi"]

6.數(shù)組原型對象上的filter和includes方法

//利用數(shù)組原型對象上的filter和includes方法
function unique6(arr){
 var bArr= [];
 bArr= arr.filter(function(item){
 return bArr.includes(item) ? null : bArr.push(item);
 });
 return bArr;
}
var aa = [1,2,2,3,5,3,6,5,'3','muzi'];
console.log(unique6(aa))//[1, 2, 3, 5, 6, "3", "muzi"]

7.數(shù)組原型對象上的forEach和includes方法

//利用數(shù)組原型對象上的forEach和includes方法
function unique7(arr){
 var bArr= [];
 arr.forEach(function(item){
  bArr.includes(item) ? null : bArr.push(item);
 }); 
 return bArr;
}
var aa = [1,2,2,3,5,3,6,5,'3','muzi'];
console.log(unique7(aa))//[1, 2, 3, 5, 6, "3", "muzi"]

二、原型對象去重

方法一:

思路:1)構(gòu)建一個臨時數(shù)組存放結(jié)果;

            2)循環(huán)遍歷當前數(shù)組,判斷當前數(shù)組下標為i的元素是否已經(jīng)保存在臨時數(shù)組,如果已保存,則跳過,否則將此元素保存到臨時數(shù)組中。

  Array.prototype.method1 = function(){
    var arr=[];  //定義一個臨時數(shù)組
    for(var i = 0; i < this.length; i++){  //循環(huán)遍歷當前數(shù)組
      //判斷當前數(shù)組下標為i的元素是否已經(jīng)保存到臨時數(shù)組
      //如果已保存,則跳過,否則將此元素保存到臨時數(shù)組中
      if(arr.indexOf(this[i]) == -1){
        arr.push(this[i]);
      }
    }
    return arr;
  };
  var arrNum1 = [1,4,1,1,3,3,4,6,7,8,3,7,0,2,11,2,'muzi','digbig','muzi'];
  console.log(arrNum1.method1());//[1, 4, 3, 6, 7, 8, 0, 2, 11, "muzi", "digbig"]

三、es6去重

  let arr = [1,2,2,3,4,4,4];
  let s = new Set(arr);
  //結(jié)果:Set {1,2,3,4}
  let newArr = Array.from(s);
  //結(jié)果:[1,2,3,4],完成去重

若有不足請多多指教!希望給您帶來幫助!

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • javascript中驗證大寫字母、數(shù)字和中文

    javascript中驗證大寫字母、數(shù)字和中文

    本文為大家介紹下使用javascript驗證大寫字母小寫字母,數(shù)字和中文,具體示例如下
    2014-01-01
  • Javascript Symbol原理及使用方法解析

    Javascript Symbol原理及使用方法解析

    這篇文章主要介紹了Javascript Symbol原理及使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • 微信小程序 拍照或從相冊選取圖片上傳代碼實例

    微信小程序 拍照或從相冊選取圖片上傳代碼實例

    這篇文章主要介紹了微信小程序 拍照或從相冊選取圖片上傳代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • video.js添加自定義組件的方法

    video.js添加自定義組件的方法

    這篇文章主要介紹了videojs添加自定義組件的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 微信小程序中實現(xiàn)微信支付完整步驟

    微信小程序中實現(xiàn)微信支付完整步驟

    這篇文章主要給大家介紹了關(guān)于微信小程序中實現(xiàn)微信支付的相關(guān)資料,微信小程序支付是一種常見的支付方式,實現(xiàn)起來相對較為復雜,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • JS SetInterval 代碼實現(xiàn)頁面輪詢

    JS SetInterval 代碼實現(xiàn)頁面輪詢

    setInterval 是一個實現(xiàn)定時調(diào)用的函數(shù),可按照指定的周期(以毫秒計)來調(diào)用函數(shù)或計算表達式。下面通過本文給大家分享JS SetInterval 代碼實現(xiàn)頁面輪詢,感興趣的朋友一起看看吧
    2017-08-08
  • JavaScript中你不得不知道的Promise高級用法分享

    JavaScript中你不得不知道的Promise高級用法分享

    在JavaScript中,Promise是一種解決異步編程問題的重要方式,本文主要來和大家探討一下23個Promise的高級用法,每一個都在JavaScript的海洋中航行,讓開發(fā)者們能夠以更高效、優(yōu)雅的方式處理異步操作,希望對大就有所幫助
    2023-12-12
  • Javascript中的奇葩知識,你知道嗎?

    Javascript中的奇葩知識,你知道嗎?

    這篇文章主要介紹了一些Javascript中的奇葩知識,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下
    2021-01-01
  • js+css完成網(wǎng)站的會員照片信息顯示效果

    js+css完成網(wǎng)站的會員照片信息顯示效果

    js+css完成網(wǎng)站的經(jīng)典效果,一般用于會員排行榜中,會員信息的介紹,包括照片等。
    2010-06-06
  • cocos2dx骨骼動畫Armature源碼剖析(三)

    cocos2dx骨骼動畫Armature源碼剖析(三)

    本篇文章給大家分享cocos2dx骨骼動畫Armature源碼剖析(三),代碼附有注釋,介紹的非常詳細,需要的朋友可以參考下
    2015-09-09

最新評論