我想过滤具有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()任何人都可以参考任何参考或示例来解决我发布的问题?
================================================ ==========================
我还有另一个复杂的问题需要解决(于19/7/2019更新)
var new data = [
{ID : 150042379,
Name : Cake 1234
Status : 'Not Reservable'
Code ID : 302},
{ID : 150042379,
Name : Cake 1234
Status : '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 : 150054121,
Name : Bread Basic 16
Status : 'Reservable'
Code ID : 202},
{ID : 150057599,
Name : Bread Riche
Status : 'Reservable'
Code ID : 232},
]
基本上我们需要检查两个条件,即ID和Code ID
例如1,
ID和代码ID相同,并且状态为不可保留或可保留,我们将删除状态为可保留的ID和代码ID
例如2,
ID和代码ID相同,并且状态为“已完成”或“可保留”,我们将删除状态为“已完成”的ID和代码ID
例如3
如果2个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},
]
答案 0 :(得分:1)
要获得预期的结果,请使用下面的选项,使用reduce和Object.values仅循环一次,并避免多个循环进行比较
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 = Object.values(data.reduce((acc, v) =>{
if(acc[v.ID]){
acc[v.ID] = acc[v.ID].Status === 'Fail'? acc[v.ID] : v;
}else{
acc[v.ID] = v
}
return acc
},{}))
console.log(filter_data);