gpt4 book ai didi

javascript - 通过过滤器的另一个对象过滤对象数组

转载 作者:行者123 更新时间:2023-12-05 08:36:27 26 4
gpt4 key购买 nike

我有一组遵循以下结构的对象:

{
"level": 1
"objectId": "3756"
"objectIdNo": 35636
"wpId": "3635473"
}

我现在想用另一个对象过滤这些对象的数组。此 filterObject 将具有以下结构:

// filterObject
{
level: "2"
objectId: "10"
wpId: "1"
}

但是这个 filterObject 并不总是拥有所有键值对,因为它们是在 UI 中手动设置的。因此,filterObject 也可以如下所示:

{
level: "2"
}

我的目标是返回匹配此 filterObject 的新 filteredObjects 数组。当 filterObject 上只存在一个过滤器时,我想返回与这一键值对匹配的所有对象。但是,如果 filterObject 上存在更多过滤器,我想返回匹配两个键值对(不仅是一个)的所有对象。

示例:

这是我要过滤的数据:

[
{
"level": "1"
"objectId": "11"
"objectIdNo": "320"
"wpId": "123"
},
{
"level": "2"
"objectId": "12"
"objectIdNo": "321"
"wpId": "123"
},
{
"level": "2"
"objectId": "13"
"objectIdNo": "322"
"wpId": "120"
},
]

1.

如果这是我的filterObject:

{
"level": "2"
}

返回:

[
{
"level": "2"
"objectId": "12"
"objectIdNo": "321"
"wpId": "123"
},
{
"level": "2"
"objectId": "13"
"objectIdNo": "322"
"wpId": "120"
},
]

2.

如果这是我的filterObject:

{
"level": "2",
"wpId": "123"
}

返回:

[
{
"level": "2"
"objectId": "12"
"objectIdNo": "321"
"wpId": "123"
},
]

我希望这能解释我想要实现但我自己无法实现的逻辑。我将不胜感激一些想法或适用的功能。

这是我已经在 React 中尝试过的。 data 变量保存对象数组,filter 变量保存 filterObjects

useEffect(() => {
if (data) {
const filtered = data.filter((task) => {
if (!filter) {
return true;
}
return (
task.level === filter.level ||
task.objectId === filter.objectId ||
task.wpId === filter.wpId
);
});
setFilteredTasks(filtered);
}
}, [filter]);

根据我的尝试,如果我只设置一个过滤器键值对,我会得到一个空数组,

最佳答案

您可以使用 filter 获得此结果, Object.keys , 和 every .

您必须使用 filter 并传递判断它是否包含在最终结果中的谓词。

在 predicate 中,遍历 filters 对象的所有属性,并匹配它是否存在于 data 中。简单

data.filter((o) =>Object.keys(filters).every((k) => filters[k] === o[k]));

const data = [{
level: "1",
objectId: "11",
objectIdNo: "320",
wpId: "123",
},
{
level: "2",
objectId: "12",
objectIdNo: "321",
wpId: "123",
},
{
level: "2",
objectId: "13",
objectIdNo: "322",
wpId: "120",
},
];

const filters = {
level: "2",
wpId: "123",
};

const result = data.filter((o) =>
Object.keys(filters).every((k) => filters[k] === o[k])
);
console.log(result);

关于javascript - 通过过滤器的另一个对象过滤对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69010671/

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