配列値と等しいオブジェクトを削除する操作
P粉985686557
2023-09-05 20:56:36
<p>オブジェクト配列と通常の配列があり、オブジェクト配列の項目が通常の配列の項目と等しい場合、それを削除したいと考えています。これは私にとって混乱を招きます。 </p>
<p>これまでに試したことは次のとおりです: </p>
<p>
<pre class="snippet-code-js lang-js prettyprint-override"><code>var 国 =
[
{ChoicesID: 1, ChoicesName : 'アフガニスタン'},
{ChoicesID: 2, ChoicesName : 'アルバニア'},
{ChoicesID: 3, ChoicesName : 'アルジェリア'},
{ChoicesID: 4, ChoicesName : 'アンゴラ'},
{ChoicesID: 5, ChoicesName : 'アルゼンチン'},
{ChoicesID: 6, ChoicesName : 'アルメニア'}
];
var 答え = ['アフガニスタン','アルバニア','アルジェリア'];
var ChoicesName = new Set(countries.map(d => d.ChoicesName));
var NewCountries = [...ChoicesName, ...answer.filter(d => !ChoicesName.has(countries.find(o => o.ChoicesName === 回答)))];
console.log(NewCountries );</code></pre>
</p>
<p>予想される出力は次のようになります: </p>
<pre class="brush:php;toolbar:false;">var NewCountries =
[
{ChoicesID: 4, ChoicesName : 'アンゴラ'},
{ChoicesID: 5, ChoicesName : 'アルゼンチン'},
{ChoicesID: 6, ChoicesName : 'アルメニア'}
];</pre></p>
リーリー ###このような?
filter
を使用し、answer
に存在する場合は削除します。 O(1) ルックアップのanswerSet
を作成します。それ以外の場合は、includes
を使用できますが、includes
の時間計算量は O(m) です (m はanswer
配列内の要素の数、n はcountries
配列内の要素の数)セットを使用する
O(m) O(n).O(1) = O(n) (n>m の場合)
使用インクルード
O(n).O(m) = O(nm)