在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中文網其他相關文章!