[英]How to combine objects with the same elements in JavaScript?
I want to combine same key element in below object and new array as output.我想将 object 下面的相同关键元素和新数组组合为 output。
const items = [
{status:'all',task:'AA'},
{status:'all',task:'BB'},
{status:'working',task:'XX'},
{status:'working',task:'YY'},
{status:'complete',task:'ZZ'},
]
In items, I want to combine same status and make new array like below.在项目中,我想组合相同的状态并制作如下所示的新数组。
const newItems = [
{status:'all',task:['AA','BB']},
{status:'working',task:['XX','YY']},
{status:'complete',task:['ZZ']},
]
So I tried to make code below.所以我尝试在下面编写代码。
let baseItems = items
const newItems = baseItems.map((e)=>{
const newBaseItems = baseItems.filter((v)=>v.status === e.status)
newBaseItems.map((e)=>{
return {
status:e.status,
task:e.task
}
})
})
console.log(newItems)
but out was like [undefined,undefined,,,,] Does anyone teach me, please?但出来就像 [undefined,undefined,,,,] 有人教我吗?
I don't think a nested loop is the right approach here.我不认为嵌套循环是正确的方法。 Iterate just once , into an object indexed by status
.仅迭代一次,进入由status
索引的 object 。 On each iteration, create a { status, task: [] }
on the object if it doesn't exist yet, then push to the task array:在每次迭代中,如果 object 尚不存在,则在 object 上创建一个{ status, task: [] }
,然后推送到任务数组:
const items = [ {status:'all',task:'AA'}, {status:'all',task:'BB'}, {status:'working',task:'XX'}, {status:'working',task:'YY'}, {status:'complete',task:'ZZ'}, ]; const itemsByStatus = {}; for (const { status, task } of items) { itemsByStatus[status]??= { status, task: [] }; itemsByStatus[status].task.push(task); } console.log(Object.values(itemsByStatus));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.