JavaScript で配列から重複する値を削除する
重複を含む可能性のある配列を扱っており、次の値のみを含む新しい配列を作成する必要がありますか?独特の価値観?この一般的な問題を解決するための複数のアプローチを含む包括的なガイドを次に示します。
TL;DR: ES6 セットおよびスプレッド構文の使用
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); }) };
保存中最初または最後の出現 (セットまたはマップを使用)
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 中国語 Web サイトの他の関連記事を参照してください。