/**一下我會用多種方法完成數組去重,去空************************************
*對於一個普通的數組,用任何一門語言都能很容易的完成去重去空,但是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)。當然可能還有更好的方法。
//以上的代碼為近期優化代碼過程中的感想,肯定還有更多更好的方法。希望有感想的你留下你寶貴的代碼。