數組去重

 js 羣中有人問數組如何去重,激發一陣熱烈討論。javascript

若是是在 powershell 中,那就簡單了,直接調用 get-unique 方法便可。java

在 js 中,又如何來處理數組去重呢?shell

下面談談我對此問題的理解。數組

---------------------------------------------測試

一種思路是利用數組的 indexOf 方法(用 lastindexOf 應該也能夠),此方法會檢測傳入 indexOf 方法中的值,是否在數組中出現過,如未找到,是返回值 -1 ,由此來判斷。spa

        var arr = [0, 1, 2, 3, 4, 5, 5, 4, 3, 2, 1];
        var arr1 = ["red", "green", "blue", "red", "purple", "maroon", "green", "yellow", "blue","red"];
        //利用數組的indexOf方法
        function getUnique(arr) {
            //用數組字面量聲明一個空數組,將做爲去重後的結果返回
            var result = [];

            //利用for遍歷傳入的測試數組,檢測數組中的每一個值是否已出如今結果數組中
            //返回 -1 ,則代表無,隨即調用數組的 push 方法把此值壓入結果數組中
            for (var i = 0; i < arr.length; i += 1) {
                if (result.indexOf(arr[i]) == -1) {
                    result.push(arr[i]);
                }
            }
            return result;
        }

        alert(getUnique(arr));
        alert(getUnique(arr1));

---------------------code

另外一思路,則是利用對象特性輔助去重對象

        //藉助 js 對象特性爲輔助去重
        
        function getUniquer1(arr) {
            //用數組字面量聲明一個空數組,將做爲去重後的結果返回
            var result = [];

            //用對象字面量聲明一個空對象,做爲輔助判斷當前數組值是否爲重複
            var aux = {};

            for (var i = 0; i < arr.length; i += 1) {
                if (!aux[arr[i]]) {     //最關鍵!判斷對象中名爲 arr[i] 的屬性值是否爲 false!
                    result.push(arr[i]);   //調用push方法,把值壓入結果數組中
                    aux[arr[i]] = 1;     //重要!給對象中名爲 arr[i]的屬性賦值!
                }
            }
            return result;
        }

        alert(getUniquer1(arr));
        alert(getUniquer1(arr1));

 --------------------------------------------------------華麗的分割線--------------------------------------------blog

兩種思路,高下立判:ip

前者調用 indexOf 方法,每次均需遍歷整個數組,設想下,數組中有 10000 項,所耗費時間之大,不可想象。

相關文章
相關標籤/搜索