简体   繁体   English

如何在 JavaScript 中组合具有相同元素的对象?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM