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