はい。それは実際には非常にきれいな解決策になります。そのトリックは、Array#filter
では、配列のすべての要素が複数の引数を受け入れる関数で適用されるということです。 2番目の引数は、ソース配列内の要素のインデックスです。
だから、あなたはインデックスを知っていることを考えると、それは単に
(state, action) => ({
...state,
messages: state.messages.filter((item, index) => index !== action.index)
})
しかし、あなたはインデックスを知らないのです。代わりに、値はid
です。
(state, action) => ({
...state,
messages: state.messages.filter(item => item.id !== action.id)
})
注意してください:この場合、あなたは正しい、あなたは単にターゲットid
に等しいないid
の値を持つ要素を入れただけに、このid
に対するソース配列をフィルタ処理する必要があります。 state.messages
を広げて新しい配列に戻す必要はありません。 Array#filter
はソース配列を変更しません。これは素晴らしいことです。
===
の代わりに!==
です。あなたは近くにいた。
spread演算子は両方の配列を連結するようです。 https://repl.it/EvXg/1をご覧ください。@Rajesh – softcode
パフォーマンス上の理由があるのだろうかと思います。大規模な配列でスライスメソッドを高速化できますか? – Scimonster
@Scimonsterそれは私が考えていたものです。私は彼らのアプローチを理解していない、それは欺瞞的に非効率的だと思われる。 – softcode