JavaScript-如何使用其他条件过滤重复行

JavaScript-如何使用其他条件过滤重复行,javascript,arrays,ecmascript-6,filter,Javascript,Arrays,Ecmascript 6,Filter,我想筛选条件为1的重复行 例如: 1) 我有不同状态的重复ID 2) 如果状态为“已完成”,我想筛选重复的ID var data = [ {ID : 1, Status : 'Completed'}, {ID : 1, Status : 'Fail'}, {ID : 2, Status : 'Fail'}, {ID : 2, Status : 'Completed'}, {ID : 3, Status : 'Fail

我想筛选条件为1的重复行

例如:

1) 我有不同状态的重复ID
2) 如果状态为“已完成”,我想筛选重复的ID

var data = [
    {ID : 1,
    Status : 'Completed'},
    {ID : 1,
    Status : 'Fail'},
    {ID : 2,
    Status : 'Fail'},
    {ID : 2,
    Status : 'Completed'},
    {ID : 3,
    Status : 'Fail'},
    {ID : 4,
    Status : 'Completed'},
    {ID : 5,
    Status : 'Completed'},
    ]
我想要的结果是:

var filter_data = [
    {ID : 1,
    Status : 'Fail'},
    {ID : 2,
    Status : 'Fail'},
    {ID : 3,
    Status : 'Fail'},
    {ID : 4,
    Status : 'Completed'},
    {ID : 5,
    Status : 'Completed'},
    ]
我想试试.filter()。有人有我可以参考的参考资料或示例来解决我发布的问题吗

===========================================================================

我还有一个复杂的问题需要解决(2019年7月19日更新)


基本上,我们需要检查两个条件,即ID和代码ID

例如1,

ID和代码ID相同,并且状态为Not Reservable或Reservable,我们将删除状态为Reservable的ID和代码ID

例如2,

ID和代码ID相同,并且状态为“已完成”或“可保留”,我们将删除状态为“已完成”的ID和代码ID

例如3,

如果两个ID相同,而代码ID不同,我们将在列表中同时显示这两个ID

所以我想要的结果是什么

var filter_new_data = [
        {ID : 150042379,
        Name : Cake 1234
        Status : 'Not Reservable'
        Code ID : 302},
        {ID : 150042379,
        Name : Bread 1236 Ticket
        Status : 'Reservable'
        Code ID : 391},
        {ID : 150053213,
        Name : Bread Basic 8
        Status : 'Reservable'
        Code ID : 201},
        {ID : 150053213,
        Name : Bread Basic 6
        Status : 'Reservable'
        Code ID : 301},
        {ID : 150054121,
        Name : Bread Basic 16
        Status : 'Not Reservable'
        Code ID : 202},
        {ID : 150057599,
        Name : Bread Riche
        Status : 'Reservable'
        Code ID : 232},
        ]

为了获得预期的结果,请使用下面的选项,即使用reduce和Object.values只循环一次,并避免多个循环进行比较

  • 使用reduce循环
  • 创建ID为键的对象
  • 使用ID检查状态并更新累加器对象
  • 使用object.values获取过滤对象的值
  • var数据=[
    {ID:1,
    状态:“已完成”},
    {ID:1,
    状态:'失败'},
    {ID:2,
    状态:'失败'},
    {ID:2,
    状态:“已完成”},
    {ID:3,
    状态:'失败'},
    {ID:4,
    状态:“已完成”},
    {ID:5,
    状态:“已完成”},
    ]
    var filter_data=Object.values(data.reduce)(acc,v)=>{
    如果(根据[v.ID]){
    acc[v.ID]=acc[v.ID]。状态===“失败”?acc[v.ID]:v;
    }否则{
    acc[v.ID]=v
    }
    返回acc
    },{}))
    
    console.log(过滤数据)
    Hi@Naga Sai,我刚刚更新了问题,问题更复杂了。当你有空的时候,你能看一看吗?@weikian,当最初的问题被回答时,我想这应该是一个新的问题,有了这个复杂的场景
    var filter_new_data = [
            {ID : 150042379,
            Name : Cake 1234
            Status : 'Not Reservable'
            Code ID : 302},
            {ID : 150042379,
            Name : Bread 1236 Ticket
            Status : 'Reservable'
            Code ID : 391},
            {ID : 150053213,
            Name : Bread Basic 8
            Status : 'Reservable'
            Code ID : 201},
            {ID : 150053213,
            Name : Bread Basic 6
            Status : 'Reservable'
            Code ID : 301},
            {ID : 150054121,
            Name : Bread Basic 16
            Status : 'Not Reservable'
            Code ID : 202},
            {ID : 150057599,
            Name : Bread Riche
            Status : 'Reservable'
            Code ID : 232},
            ]