Js去除数组里重复元素

今天面试,其中一道面试题:去除数组里重复的元素。(说实话,遇到这种手写代码的真的很无语。。。axb)

不晓得我又没有答对,所以回来试试。

不敲不知道,一敲吓一跳。。。。   回想自己写的。。。简直是tuoshi。。。。   

算了算了    生活还是要继续。

 

敲黑板,切入正题......

方法一:

 将数组逐渐搬到另一个数组中,当遇到元素重复时,不移动;不重复,则移到新数组中。

<script>
    /*将数组逐渐搬到另一个数组中,当遇到元素重复时,不移动,不重复,则移到新数组中*/
    var a = [1,2,1,2,33,3,3,3,1,1,33,3];
    function filterArr(arr) {
        var result = [];
        for (var i=1; i<arr.length; i++){
            //设置一个标志:是否移动,设置在这里的目的之一是为了将最后一个元素一定添加到新数组中。
            var flag = true
            for (var j=i; j<arr.length-1; j++){
                if (arr[i] == arr[j+1]){
                    console.log(arr[i])
                    //如果第i元素个后面有与arr[i]相同的元素 则将flag设置为false,不移动
                    flag = false
                    break;   //并跳出循环
                }
            }
            if(flag){
                result.push(arr[i])
            }
        }
        return result;
    }
    var res = filterArr(a)
    console.log(res)
</script>

 

方法二:

遍历数组arr,把元素分别放入另一个数组result中,判断arr中的元素在result中是否存在,不存在即加入result中。
<script>
    /*遍历数组arr,把元素分别放入另一个数组result中,判断arr中的元素在result中是否存在,不存在即加入result中*/
    var a = [1,2,1,2,33,3,3,3,1,1,33,3];
    function filterArr(arr) {
        var result = [];
        for(var i=0;i<arr.length;i++){
            if(result.indexOf(arr[i])==-1){
                //arr[i]不存在于result中时,返回-1
                result.push(arr[i])
            }
        }
        return result;
    }
    var res = filterArr(a)
    console.log(res)
</script>

 

方法三:

将数组的值作为对象的属性,通过对象的属性值来判断数组是否重复,若该项不重复则给对象对应属性值赋为true,便于之后的判断,并将数据项加入结果集中。
<script>
    /*将数组的值作为对象的属性,通过对象的属性值来判断数组是否重复,
    若该项不重复则给对象对应属性值赋为true,便于之后的判断,并将数据项加入结果集中*/
    var a = [1,2,1,2,0,3];
    function filterArr(arr) {
        var result = [];
        var obj = {}
        for(var i=0;i<arr.length;i++){
            //这里通过方括号给对象动态地添加属性
            if (!obj[arr[i]]){
                result.push(arr[i])
                obj[arr[i]] = true
            }
        }
        return result;
    }
    var res = filterArr(a)
    console.log(res)
</script>

 

方法四:

将数组的值赋给另一个数组的键,此时重复的元素都被删除,然后取新数组的键作为去重后的结果。

/*将数组的值赋给另一个数组的键,此时重复的元素都被删除,然后取新数组的键作为去重后的结果*/
    var a = [1,2,1,2,0,3];
    function filterArr(arr) {
        var result = []
        var temp = []
        for(var i in arr){
            //将原数组的值作为键传给temp数组,键不能重复,自动去重
            temp[arr[i]] = 1;
        }
        //将temp数组的键作为值push给result
        for(var i in temp){
            result.push(i)
        }
        return result
    }
    var res = filterArr(a)
    console.log(res)

 

参考:http://www.cnblogs.com/lhyhappy65/p/5912460.html

 最后还是想吐槽一下面试题里的手写代码题。。。。。如果这是评判能力的标准之一。。。有本事你给我手写一个项目出来啊!!  

 

posted @ 2017-09-06 21:46  Mixier  阅读(941)  评论(0)    收藏  举报