検索

ホームページ  >  に質問  >  本文

JavaScript - 配列の重複排除の問題

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

リーリー

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

リーリー

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

女神的闺蜜爱上我女神的闺蜜爱上我2828日前713

全員に返信(9)返信します

  • 漂亮男人

    漂亮男人2017-06-28 09:26:12

    慣例により、ES6 コード

    リーリー

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

    リーリー

    その他のソリューション

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

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

    リーリー

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

    リーリー

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

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

    リーリー

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

    。 リーリー

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

    返事
    0
  • 某草草

    某草草2017-06-28 09:26:12

    リーリー

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

    リーリー

    返事
    0
  • 仅有的幸福

    仅有的幸福2017-06-28 09:26:12

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

    リーリー

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

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

    返事
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-28 09:26:12

    リーリー

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

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-28 09:26:12

    リーリー

    返事
    0
  • 滿天的星座

    滿天的星座2017-06-28 09:26:12

    newArr = [],

    とします リーリー

    返事
    0
  • 学习ing

    学习ing2017-06-28 09:26:12

    リーリー

    返事
    0
  • 天蓬老师

    天蓬老师2017-06-28 09:26:12

    ぜひ参考にしてください

    リーリー

    返事
    0
  • 为情所困

    为情所困2017-06-28 09:26:12

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

    返事
    0
  • キャンセル返事