前提
以下のデータをフォーマットする処理を書いたのですが、冗長になりすぎてしまい、少々読みにくいと感じた為、簡潔に書く方法があれば教えて欲しいです。
const planList = [ { id: '1', name: 'aaaa', plans: [ { id: '1', name: 'test1', score: '150', }, { id: '2', name: 'test2', score: '220', }, { id: '3', name: 'test3', score: '300', } ] }, { id: '2', name: 'bbbb', plans: [] }, { id: '3', name: 'cccc', plans: [ { id: '4', name: 'test5', score: '100', }, { id: '5', name: 'test6', score: '200', }, { id: '5', name: 'test7', score: '900', } ] }, ]
試したこと
自分が書いたコードは以下になります
const formatPlanList = planList.map(elem => { const filterPlans = elem.plans.filter( (element, index, self) => { const sortIndex = self.findIndex((e) => { if(e.id) { if(e.id === element.id) { return true } else { return false } } else { return false } }) if (sortIndex === index) { return true } else { return false } }) return filterPlans }) .filter(e => e.length > 0) .map(elem => { const plans = elem.map(plan => { return { id: plan.id, name: plan.name, img: plan.id, point: plan.score } }) return plans })
実装した内容としては、planList.plans
のidが重複していた場合は重複している要素を削除し、空の配列を削除した後に、planList.plans
を指定のプロパティに変更しているといった形です。
良い実装方法がありましたら、ご助言頂けましたら幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/09/10 13:21 編集