理解js動態精髓之數組操作


/**一下我會用多種方法完成數組去重,去空************************************

*對於一個普通的數組,用任何一門語言都能很容易的完成去重去空,但是js的動態性,賦予了數組更靈活的魂魄。

*首先請看。

*如下例子:將字符串var testStr = '1,23,,3,3,3,,,1,2,2,23,';轉為數組去重去空。

***************************************************************************/

var testStr = '1,23,,3,3,3,,,1,2,2,23,';

var testArr = testStr.split(/,|,/);

//如果js開發經驗少的人可能,或者靜態編譯語言開發的人想到的可能會想到如下解決方法。

var tempArr = new Array();

for( var i = 0, l = testArr.length; i < l; i ++ ) {

    if( !!testArr[i] ) {

        tempArr.push(testArr[i]);

    }

}

alert(tempArr);

//思路很簡單,兩個數組。

//但是js的使命是一個數組解決問題。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

//方法一

var i = 0;

var l = testArr.length;

while( i < l ) {

    if( !testArr[i] ) {

        testArr.splice(i, 1);

        l --;

        continue;

    }

    i ++;

}

alert(testArr);

//總結:方法一從前往后遍歷,遇到空的刪之。因為js的數組動態變化,l--,splice是數組的一個方法

//方法二

var l = testArr.length;

while( --l > 0 ) {

    if( !testArr[l] || testArr[l] == '' ) {

        testArr.splice(l, 1);

    }

}

alert(testArr);

//總結:方法二是從后往前遍歷,遇到空的刪之。始終牢記。js的數組的長度是可以改變的。如果testArr.length = 0,即將數組置空。

 

//受到上面的方法的啟示后,去重的原理也差不多了。

//注:::::::::::是在上面去空的基礎上哈。

var l = testArr.length;

while( --l ) {

    for( var i =0; i < l; i++ ) {

        if( testArr[l] = testArr[i] ) {

            testArr.splice(l, 1);

            break;

        }

    }

}

//總結:還是數組的動態性,雙重循環,比較,重復刪之。時間復雜度是n*(n-1)。當然可能還有更好的方法。

//以上的代碼為近期優化代碼過程中的感想,肯定還有更多更好的方法。希望有感想的你留下你寶貴的代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM