【问题标题】:How to filter data from array of objects如何从对象数组中过滤数据
【发布时间】:2020-11-11 23:51:40
【问题描述】:

您好,谁能帮我创建一个对象数组,其中数组的 object 具有特定事件 ID 的最高版本

这是我的数组:

[{ version: 1, eventId: 12, id: 22 },
 { version: 2, eventId: 12, id: 23 }, 
 { version: 3, eventId: 12, id: 24 }, 
 { version: 1, eventId: 13, id: 25 }, 
 { version: 2, eventId: 13, id: 26 }]

预期结果

[{ version: 3, eventId: 12, id: 24 }, { version: 2, eventId: 13, id: 27 }]

【问题讨论】:

    标签: javascript arrays dictionary filter reduce


    【解决方案1】:

    这是你想要的:

    const ar = [{ version: 1, eventId: 12, id: 22 },
     { version: 2, eventId: 12, id: 23 }, 
     { version: 3, eventId: 12, id: 24 }, 
     { version: 1, eventId: 13, id: 25 }, 
     { version: 2, eventId: 13, id: 26 }];
     
    const res = Array.from(ar.reduce((a, c) => {
        if (a.has(c.eventId)) {
            if (c.version > a.get(c.eventId).version) {
                a.set(c.eventId, c)
            }
        } else {
            a.set(c.eventId, c)
        }
        return a;
    }, new Map()).values())
    
    
    console.log(res);

    【讨论】:

      【解决方案2】:

      按最高排序,然后使用filter

      array=[{ version: 1, eventId: 12, id: 22 }, { version: 2, eventId: 12, id: 23 }, { version: 3, eventId: 12, id: 24 }, { version: 1, eventId: 13, id: 25 }, { version: 2, eventId: 13, id: 26 }, { version: 3, eventId: 13, id: 27 }]
      vn=array.sort((a,b)=>b.id-a.id)[0].version
      res=array.filter(o=>o.version==vn)
      console.log(res)

      【讨论】:

        猜你喜欢
        • 2022-08-15
        • 1970-01-01
        • 2020-08-15
        • 2022-07-20
        • 2020-12-14
        • 1970-01-01
        • 2020-04-07
        • 1970-01-01
        • 2021-04-23
        相关资源
        最近更新 更多