1. 程式人生 > >js數組去重算法

js數組去重算法

var i++ script 代碼 共勉 真的 重復 等於 嵌套

  來來來 ,整理完數組排序 ,咱們再來看看數組去重 。這個可以說有很多方式了 。之前看過的算法方式太多 ,導致思路其實有時候真的很受限,不過也是整理來學習用的 ,如有雷同 ,純屬巧合啊 ,小婊貝們~

  首先呢 ,我們來看看思路比較直接的方法,基本思路就是聲明一個新數組arr_n,將【0】這個成員壓入arr;然後從【1】開始循環當前數組,設置一個變量a,給他一個初始值1;內層嵌套從【0】對arr_n數組的循環 ,用外層對當前數組循環的當前項this[i]和arr_n的每一項arr_n[j]進行對比,如果有相等,則將0賦值給a,然後break退出內層循環;判斷a的值,若等於初始值則說明遍歷完arr_n並沒有重復,則將當前this[i]壓入新數組 arr_n,以此類推 ,直到所有排序完成 ,返回新數組 arr_n; 代碼如下:

Array.prototype.unique=function(){
    var arr_n=[];
    arr_n.push(this[0]);
    for(var i=1;i<this.length;i++){
        var a=1;
        for(var j=0;j<arr_n.length;j++){
            if(this[i]==arr_n[j]){
                a=0;
                break;
            }
        }
        if(a==1){
            arr_n.push(
this[i]); } } return arr_n; }; var a=[1,3,4,3,5,2,5]; a.unique();

  最近在看JavaScript面向對象編程這本書時發現了一個特別好的API是indexOf,後來網上查了查用在數組上其實也是很棒的有木有 ,不過還是有坑的 ,下面關於indexOf對數組用法是復制來的 ,因為覺得很淺顯易懂了,大家共勉 ,大家看看別踩了坑 就行;再者就是 indexOf是ES5的語法 ,不支持IE8以下的瀏覽器(無奈攤手~ )

let arr = [‘orange‘, ‘2016‘, ‘2016‘];
 
arr.indexOf(
‘orange‘); //0 arr.indexOf(‘o‘); //-1 arr.indexOf(‘2016‘); //1 arr.indexOf(2016); //-1 這裏沒把例子拆的那麽細,四個用例足以說明問題。 arr.indexOf(‘orange‘) 輸出 0 因為 ‘orange‘ 是數組的第 0 個元素,匹配到並返回下標。 arr.indexOf(‘o) 輸出 -1 因為此方法不會在每一個元素的基礎上再次執行 indexOf 匹配。 arr.indexOf(‘2016‘) 輸出 1 因為此方法從頭匹配直到匹配到時返回第一個數組元素的下表,而不是返回全部匹配的下標。 arr.indexOf(2016) 輸出 -1 註意:這裏不會做隱式類型轉換。

以下是運用indexOf的代碼段:

Array.prototype.unique1=function(){
    var arr_n=[];
    arr_n.push(this[0]);
    for(var i=1;i<this.length;i++){
        if( arr_n.indexOf(this[i])==-1){
            arr_n.push(this[i]);
        }
    }
    return arr_n;
}
var b=[12,3,4,5,3,5,3,7,12];
b.unique1();

還有一種方法 ,我認為是比較好的了 ,簡潔又不存在兼容性問題,思路也很簡單 ,先聲明一個空數組和一個object對象,循環遍歷當前數組,將數組的每一項當做object的屬性來看 ,判斷對象是否已有當前項的屬性即可 ,若不重復,將當前this[i]push進新數組,給object的this[i]屬性賦個值即可,最後返回新數組;代碼如下:

Array.prototype.unique2=function(){
    var arr_n=[],obj={};
    for(var i=0;i<this.length;i++){
        if(!obj[this[i]]){
            arr_n.push(this[i]);
            obj[this[i]]=1;
        }
    }
    return arr_n;
};
var b=[12,3,4,5,3,5,3,7,12];
b.unique2();

如果你也剛好入門 ,剛好對去重算法比較懵懂 ,希望對你有些許幫助!

js數組去重算法