私は自分のアプリケーションでRedditのような投票システムを作成しています。各オブジェクト(スレッド)はスコアプロパティと、親オブジェクトに似たオブジェクトの配列(スレッドのコメントと考える)を持っています。ここ
は簡単な例です:大きなオブジェクト配列内で単一のオブジェクトプロパティを突然変異させる最速の方法は何ですか?
{
id: '123fdx12c1',
author: 'Anon',
score: 1,
users: [
{
id: '321fdx12c1',
name: 'anon',
score: 1
},
{
id: 'asd123f1fd1',
name: 'anon',
score: 1
}
]
}
は今、このようなオブジェクトの大きな配列を想像してみてください。ユーザーが投票するたびに、適切なIDを持つアクションがディスパッチされ、一致するIDが検索され、スコア値が変更されます。
私のアプローチ:
case 'VOTE':
return state.map((question) => {
question.users = question.users.map((user) => {
if (user.id == action.id) {
return {
...user,
voteStatus: action.voteStatus,
score: action.score
}
}
return user;
});
if (question.id == action.id) {
return {
...question,
voteStatus: action.voteStatus,
score: action.score
}
}
return question;
});
それはちょうど、オブジェクトのプロパティを1つ変更するには、配列全体をマッピングします。これにはより速いアプローチがありますか?
もちろん、 'state.users [id] .score = 'something else''プロパティを変更するだけです。 – adeneo
@adeneo' state.users'は配列ではないオブジェクトです。 –
ええ、メモリに状態を保持するのではなく、適切なデータベースを使用してください。データベースクエリは高速に最適化されています。 –