gpt4 book ai didi

Javascript 多条件数组过滤器

转载 作者:数据小太阳 更新时间:2023-10-29 06:00:20 25 4
gpt4 key购买 nike

我需要帮助来组合基于多个条件的数组搜索。此外,所有条件都是有条件的,这意味着我可能需要也可能不需要根据这些条件进行过滤。我有什么:

要过滤的对象数组:

var data = [{
"_id" : ObjectId("583f6e6d14c8042dd7c979e6"),
"transid" : 1,
"acct" : "acct1",
"transdate" : ISODate("2012-01-31T05:00:00.000Z"),
"category" : "category1",
"amount" : 103
},
{
"_id" : ObjectId("583f6e6d14c8042dd7c2132t6"),
"transid" : 2,
"acct" : "acct2",
"transdate" : ISODate("2012-01-31T05:00:00.000Z"),
"category" : "category2",
"amount" : 103
},
{
"_id" : ObjectId("583f6e6d14c8042dd7c2132t6"),
"transid" : 3,
"acct" : "acct2",
"transdate" : ISODate("2016-07-31T05:00:00.000Z"),
"category" : "category1",
"amount" : 103
},
{
"_id" : ObjectId("583f6e6d14c8042dd7c2132t6"),
"transid" : 4,
"acct" : "acct2",
"transdate" : ISODate("2012-01-31T05:00:00.000Z"),
"category" : "category2",
"amount" : 103
},
{
"_id" : ObjectId("583f6e6d14c8042dd7c2132t6"),
"transid" : 5,
"acct" : "acct2",
"transdate" : ISODate("2012-01-31T05:00:00.000Z"),
"category" : "category3",
"amount" : 103
},
{
"_id" : ObjectId("583f6e6d14c8042dd7c152g2"),
"transid" : 6,
"acct" : "acct3",
"transdate" : ISODate("2016-10-31T05:00:00.000Z"),
"category" : "category3",
"amount" : 103
}]

我正在根据另一个混合元素数组过滤上述对象数组。这些元素代表以下搜索字段:

  • “searchstring”:在数据数组的所有字段上搜索任何匹配的文本序列

  • 具有表示帐户类型和 true 或 false 键值的对象用于指示是否应该用于过滤的值

  • 筛选转换日期的开始日期

  • 过滤转换的结束日期

  • 过滤类别的类别名称

具有搜索条件的数组如下所示(但如果某些字段不是必需的,它们将被设置为未定义或只是一个空字符串或数组):

var filtercondition = {
"p",
{acct1:true,acct2:false,acct3:true...}
"2016-06-01",
"2016-11-30",
"category3"
}

实现此目标的最佳方法是什么?我设计的是单独搜索过滤器数组中的每个元素,但这似乎不是最佳的并且非常乏味。我愿意重新设计我的设置...

最佳答案

// You wrote that it's an array, so changed the braces 
var filtercondition = ["p",
{acct1:true,acct2:false,acct3:true...}
"2016-06-01",
"2016-11-30",
"category3"
];

var filtered = data.filter(o => {
if(filtercondition[0] && !o.category.includes(filtercondition[o])) { // checking just the category, but you can check if any of more fields contains the conditions
return false;
}
if(filtercondition[1]) {
for(var key in filtercondition[1]) {
if(filtercondition[1][key] === true && o.acct != key) {
return false;
}
}
}
if(filtercondition[2] && o.transdate < filtercondition[2]) {
return false;
}
if(filtercondition[3] && o.transdate > filtercondition[3]) {
return false;
}
if(filtercondition[4] && o.category !== filtercondition[4]) {
return false;
}

return true;
});

两个注意事项: - 更改了 filtercondition 的大括号,使其成为一个数组,但我建议改用对象。 - 这个 {acct1:true,acct2:false,acct3:true...} 示例对我来说没有意义,因为它表明 acct 字段应该是acct1acct3 同时发生。

关于Javascript 多条件数组过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41626302/

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