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

JavaScript 數組去重:在 push 前遍歷判斷避免重複元素的簡單實現

     編輯:程式設計疑難解答

基本邏輯

var list = [];
function addUnique(item) {
    var exists = false;
    for (var i = 0; i < list.length; i++) {
        if (list[i] === item) { // 對象需自定義比較邏輯
            exists = true;
            break;
        }
    }
    if (!exists) list.push(item);
}

適用場景與局限

  • ✅ 簡單類型(數字、字符串、布爾值)。
  • ✅ 數據量較小(< 1000)的陣列。
  • ❌ 對象/數組引用比較(需深度比較或唯一標識字段)。
  • ❌ 大數據量(O(n²) 時間複雜度),建議使用 Set 或 Map。

現代最佳實踐 (ES6+)


// 簡單類型
var unique = [...new Set(list)];

// 對象去重(按 id 字段)
var uniqueObjs = Array.from(new Map(list.map(o => [o.id, o])).values());

// 兼容舊環境
function uniqueArray(arr) {
    var seen = {};
    return arr.filter(function(item) {
        var key = JSON.stringify(item); // 簡單序列化作 key
        return seen.hasOwnProperty(key) ? false : (seen[key] = true);
    });
}

建議

項目中引入 lodash.uniq 或 lodash.uniqBy,功能全面且性能優化。

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