js面试题——为javascript增加删除重复元素的方法

来源:互联网 发布:rockwell plc编程软件 编辑:程序博客网 时间:2024/05/16 16:21

上次看到一个js笔试题,回来之后完成了下,感觉做的过程中还是挺有收获的,虽然我的重心是放在服务器端,但是目前js的重要性已远远超过以前,是我们完全不能忽略了的,应该说我们每一个开发人员都有必要对其进行系统的学习,而不是用什么看什么。

 

这次题目的需求就是为Array增加一个方法,删除重复的元素。目前我考虑的是数组中存储的是基本类型而非引用。代码如下:

 

<script language="javascript">
Array.prototype.deleteSameTwo = function() {
    var tempArr = new Array();
    function contains(temp) {
        var flag = false;
        if(tempArr.length==0)
        {
        return flag;
        }
        for ( var i=0;i<tempArr.length;i++ ) {
            if (tempArr[i] == temp) {
                flag = true;
                break;
            }
        }
        return flag;
    }
    while (this.length > 0) {
        var temp = this.shift();
        if (!contains(temp)) {
            tempArr.push(temp);
        }
    }
    return tempArr;
}
</script>

 

我们在测试的时候可以用一下代码进行测试:

 

var array = new Array();
array.push('1');
array.push('1');
array.push('2');
array.push('2');
array.push('3');
array = array.deleteSameTwo();
alert(array);

 

 

要注意的是上面的for语句:

for ( var i=0;i<tempArr.length;i++ ) {
            if (tempArr[i] == temp) {
                flag = true;
                break;
            }
        }

我们不能用for..in代替,刚开始做时我因为未理解他们的区别,而范了错,后来用firefox debug才调试出来,原来错误出在这里

 

for..in遍历的是某一个对象(或者说一个函数),它并不能遍历数组,如果遍历数组的话,如上面改为

 

for(var item in tempArr)

{

.....

}

则每次item的值均为undefined(undefined是从null派生来的,所以null==undefined将返回true)

 

原创粉丝点击