首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript 數組去重算法解析:uniQueue 函數邏輯詳解

     編輯:程式設計綜合問答

代碼

function uniQueue(array) {
    var arr = [];
    var m;
    while (array.length > 0) {
        m = array[0];
        arr.push(m);
        array = $.grep(array, function(n, i) {
            return n == m;
        }, true); // true 表示反轉:保留不等於 m 的元素
    }
    return arr;
}

邏輯逐步拆解

  1. 取數組第一個元素 m。
  2. 將 m 加入結果數組 arr。
  3. 用 $.grep(array, fn, true) 過濾原數組,保留不等於 m 的元素(第三參數 true 為反轉模式)。
  4. 循環直到原數組為空。

效果等價

實現去重並保持首次出現順序。例如 [1,2,1,3,2] → [1,2,3]。

性能分析

  • 時間複雜度 O(n²):每次 grep 遍歷剩餘數組,且修改原數組引用。
  • 依賴 jQuery $.grep,非原生 JS。
  • 修改傳入數組(引用類型),有副作用。

現代優寫法

// ES6 Set (最簡潔、O(n))
const unique = [...new Set(array)];

// ES5 filter + indexOf (不依賴庫、保持順序)
const unique = array.filter((v, i, a) => a.indexOf(v) === i);

// Map 計數 (可獲取重複次數)
const map = new Map();
array.forEach(v => map.set(v, (map.get(v) || 0) + 1));

總結

uniQueue 是一個基於 jQuery 的教學級去重實現,理解其邏輯有助於掌握數組過濾思想,但生產環境請使用 ES6 Set 或原生 filter。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved