理解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)。当然可能还有更好的方法。

//以上的代码为近期优化代码过程中的感想,肯定还有更多更好的方法。希望有感想的你留下你宝贵的代码

posted on 2012-08-25 10:24  前端小蔡  阅读(5742)  评论(8编辑  收藏  举报

导航