オブジェクト配列があると仮定します
同じ ID を削除し、各 ID の最後の項目を保持したいです
もっと良い方法はありますか? 。
ここで問題があります。findIndex 少なくとも 2 つのブラウザがサポートしていないため、サポートしていない場合は自分で作成する必要があります
findIndex
id は文字列ではないため、ES6 Map クラスを使用します。データ量が多い場合、ルックアップ テーブルを使用すると、リスト内の線形検索に比べて効率が大幅に向上します。
Map
実際、マップの代わりにオブジェクトを使用することもできます。少なくともこの使用例では問題ありません。 es6 の機能がないため、単純に es5 構文を使用します。コードの構造とロジックは上記の段落と同じです
整数IDなので、このIDに従って配列に直接入れることができます。同じ ID が見つかった場合は、直接置き換えられます。 ID が連続していない場合は、最後にある空の要素を除外する必要があります
この解決策には、元の配列の要素の順序を維持できないという別の問題があります。そうすれば、Map を使用した解決策でもコードをそれほど複雑にすることなく同様のコードに削減できると考える人もいるでしょう。もちろん、元の順序が失われる可能性もあります
注: 上記のコードはすべて実際に実行されて渡されており、実行環境は Node v8.1.2 です
リーリー
アロー関数を使用すると次のように簡素化されます:
ここにはすでに多くの回答がありますが、Arrayの組み込み関数reduceRightについては言及されていません。実際、質問者の要件は、同じIDの最後の桁を保持することであり、reduceRightを使用して実装すると非常に便利です。
reduceRight は、元の配列の末尾からループを開始します。ここでの初期値は、ID のセットを格納するために使用され、ID が存在しない場合は、r[1] が結果の配列を格納します。 Set してから、この ID を Set に追加し、この項目を結果の配列の先頭に配置します。
結局、トピック主のニーズは簡単に達成され、順序は保証されました。
個人的にテストされ、効果的です
newArr = [],
ぜひ参考にしてください
ブログに8つの方法を書きましたので参考にしてください。 http://alfiericho.top/2017/0...
慣例により、ES6 コード
リーリーここで問題があります。
リーリーfindIndex
少なくとも 2 つのブラウザがサポートしていないため、サポートしていない場合は自分で作成する必要がありますその他のソリューション
古典的な解決策、マップを使用します
id は文字列ではないため、ES6
リーリーMap
クラスを使用します。データ量が多い場合、ルックアップ テーブルを使用すると、リスト内の線形検索に比べて効率が大幅に向上します。実際、マップの代わりにオブジェクトを使用することもできます。少なくともこの使用例では問題ありません。 es6 の機能がないため、単純に es5 構文を使用します。コードの構造とロジックは上記の段落と同じです
リーリー整数 ID を使用した奇妙な解決策
整数IDなので、このIDに従って配列に直接入れることができます。同じ ID が見つかった場合は、直接置き換えられます。 ID が連続していない場合は、最後にある空の要素を除外する必要があります
リーリーこの解決策には、元の配列の要素の順序を維持できないという別の問題があります。そうすれば、Map を使用した解決策でもコードをそれほど複雑にすることなく同様のコードに削減できると考える人もいるでしょう。もちろん、元の順序が失われる可能性もあります
。 リーリーリーリー
アロー関数を使用すると次のように簡素化されます:
リーリーここにはすでに多くの回答がありますが、Arrayの組み込み関数reduceRightについては言及されていません。実際、質問者の要件は、同じIDの最後の桁を保持することであり、reduceRightを使用して実装すると非常に便利です。
リーリーreduceRight は、元の配列の末尾からループを開始します。ここでの初期値は、ID のセットを格納するために使用され、ID が存在しない場合は、r[1] が結果の配列を格納します。 Set してから、この ID を Set に追加し、この項目を結果の配列の先頭に配置します。
結局、トピック主のニーズは簡単に達成され、順序は保証されました。
リーリー
個人的にテストされ、効果的です
リーリー
newArr = [],
とします リーリーリーリー
ぜひ参考にしてください
リーリーブログに8つの方法を書きましたので参考にしてください。 http://alfiericho.top/2017/0...