JavaScript - 配列の重複排除の問題
女神的闺蜜爱上我
女神的闺蜜爱上我 2017-06-28 09:24:12
0
9
683

オブジェクト配列があると仮定します

リーリー

同じ ID を削除し、各 ID の最後の項目を保持したいです

リーリー

もっと良い方法はありますか? 。

女神的闺蜜爱上我
女神的闺蜜爱上我

全員に返信(9)
漂亮男人

慣例により、ES6 コード

リーリー

ここで問題があります。findIndex 少なくとも 2 つのブラウザがサポートしていないため、サポートしていない場合は自分で作成する必要があります

リーリー

その他のソリューション

古典的な解決策、マップを使用します

id は文字列ではないため、ES6 Map クラスを使用します。データ量が多い場合、ルックアップ テーブルを使用すると、リスト内の線形検索に比べて効率が大幅に向上します。

リーリー

実際、マップの代わりにオブジェクトを使用することもできます。少なくともこの使用例では問題ありません。 es6 の機能がないため、単純に es5 構文を使用します。コードの構造とロジックは上記の段落と同じです

リーリー

整数 ID を使用した奇妙な解決策

整数IDなので、このIDに従って配列に直接入れることができます。同じ ID が見つかった場合は、直接置き換えられます。 ID が連続していない場合は、最後にある空の要素を除外する必要があります

リーリー

この解決策には、元の配列の要素の順序を維持できないという別の問題があります。そうすれば、Map を使用した解決策でもコードをそれほど複雑にすることなく同様のコードに削減できると考える人もいるでしょう。もちろん、元の順序が失われる可能性もあります

。 リーリー

注: 上記のコードはすべて実際に実行されて渡されており、実行環境は Node v8.1.2 です

いいねを押す +0
某草草

リーリー

アロー関数を使用すると次のように簡素化されます:

リーリー
いいねを押す +0
仅有的幸福

ここにはすでに多くの回答がありますが、Arrayの組み込み関数reduceRightについては言及されていません。実際、質問者の要件は、同じIDの最後の桁を保持することであり、reduceRightを使用して実装すると非常に便利です。

リーリー

reduceRight は、元の配列の末尾からループを開始します。ここでの初期値は、ID のセットを格納するために使用され、ID が存在しない場合は、r[1] が結果の配列を格納します。 Set してから、この ID を Set に追加し、この項目を結果の配列の先頭に配置します。

結局、トピック主のニーズは簡単に達成され、順序は保証されました。

いいねを押す +0
曾经蜡笔没有小新

リーリー

個人的にテストされ、効果的です

いいねを押す +0
伊谢尔伦

リーリー

いいねを押す +0
滿天的星座

newArr = [],

とします リーリー
いいねを押す +0
学习ing

リーリー

いいねを押す +0
Peter_Zhu

ぜひ参考にしてください

リーリー
いいねを押す +0
为情所困

ブログに8つの方法を書きましたので参考にしてください。 http://alfiericho.top/2017/0...

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート