首頁 >web前端 >js教程 >如何有效地從 JavaScript 陣列中刪除重複值?

如何有效地從 JavaScript 陣列中刪除重複值?

DDD
DDD原創
2025-01-03 12:13:41655瀏覽

How Can I Efficiently Remove Duplicate Values from JavaScript Arrays?

在JavaScript 中從數組中刪除重複值

您是否正在處理可能包含重複項的數組,並且需要僅使用以下內容創建一個新數組獨特的價值觀?這是解決此常見問題的多種方法的綜合指南。

TL;DR:使用 ES6 Set 和 Spread語法

const uniq = [...new Set(array)];

「智慧」但天真的方法(二次時間)

const uniqueArray = a.filter((item, pos) => a.indexOf(item) === pos);

時間)

const uniq = (a) => {
  const seen = {};
  return a.filter((item) => {
    return seen.hasOwnProperty(item) ? false : (seen[item] = true);
  });
};

兩全其美(線性時間)時間)

const uniq = (a) => {
  const prims = { boolean: {}, number: {}, string: {} }, objs = [];
  return a.filter((item) => {
    const type = typeof item;
    if (type in prims) {
      return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true);
    } else {
      return objs.indexOf(item) >= 0 ? false : objs.push(item);
    }
  });
};

排序與過濾(線性時間)

const uniq = (a) => {
  return a.sort().filter((item, pos, ary) => !pos || item !== ary[pos - 1]);
};

按鍵唯一鍵(基於回調過濾)

const uniqBy = (a, key) => {
  const seen = {};
  return a.filter((item) => {
    const k = key(item);
    return seen.hasOwnProperty(k) ? false : (seen[k] = true);
  })
};

保存第一次或最後一次出現(使用Set 或Map)

const uniqByKeepFirst = (a, key) => {
  const seen = new Set();
  return a.filter((item) => {
    const k = key(item);
    return seen.has(k) ? false : seen.add(k);
  });
};

const uniqByKeepLast = (a, key) => {
  return [...new Map(a.map((x) => [key(x), x]))].values();
};

選擇符合您的陣列類型和效能要求的方法。

以上是如何有效地從 JavaScript 陣列中刪除重複值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn