Jimliu


一只刚上路的前端程序猿


数组

数组去重的三种方法

前两天面试的时候,面试官出的考题。现在我来总结一下,算是慢慢积累吧

1.两个循环,挨个对比

function uniqueArr(arr) {
        var ret = [],
            length = arr.length;
        for(var i = 0;i < length; i++){
            for(j = i+1; j<length;j++){
                if(arr[i] === arr[j]){
                    j = ++i;
                }
            }
            ret.push(arr[i]);
        }
        return ret;
    }

这种方式应该是可以最容易考虑到的,但是数组过长的话,效率应该会变差。

2.先排序然后用一次循环

function uniqueArr(arr) {
        var sortedArr = arr.sort();
        var results = [];
        for (var i = 0; i < arr.length; i++) {
            if (sortedArr[i + 1] != sortedArr[i]) {
                results.push(sortedArr[i]);
            }
        }
        return results;
    }

排序后用数组后一位比较前一位,一次循环就好了,但是破坏了原有数组的顺序。

3.利用对象字面量的key与value关联性,写起来比较简单

function uniqueArr(arr) {
        var ret = [],
            json = {},
            length = arr.length;

        for(var i = 0; i < length; i++){
            var val = arr[i];
            if(!json[val]){
                json[val] = 1;
                ret.push(val);
            }
        }

        return ret;
    }

也许这种方法想的时候难想到,但是用起来真的很简单~

最近的文章

setTimeOut 执行顺序

关于setTimeOut执行顺序的一些记录 …

于  setTimeOut, 同步异步, 面试 继续阅读
更早的文章

我的2015

我的2015不善写文字,只是关于我自己的2015。。。 …

于  闲扯, 随笔 继续阅读