gpt4 book ai didi

JavaScript - 如何使用另一个条件过滤重复行

转载 作者:行者123 更新时间:2023-12-02 23:18:23 24 4
gpt4 key购买 nike

我想过滤具有 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日)

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和Code ID相同,状态为不可预订或可预订,我们将删除状态为可预订的ID和Code ID

例如2,

ID和Code ID相同,且状态为Completed或Reservable,我们将删除状态为Completed的ID和Code ID

例如3,

如果2个I​​D相同,并且Code 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仅循环一次并避免多次循环进行比较

  1. 使用reduce循环
  2. 创建以 ID 为键的对象
  3. 使用 ID 检查状态并更新累加器对象
  4. 使用object.values获取过滤后的Object的值

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);

codepen - https://codepen.io/nagasai/pen/qzeYZG?editors=1010

关于JavaScript - 如何使用另一个条件过滤重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57061337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com