gpt4 book ai didi

javascript - 如何允许过滤器 bool 值是非互斥的?

转载 作者:行者123 更新时间:2023-11-30 14:10:54 25 4
gpt4 key购买 nike

我正在尝试使用值为 truefalse 的对象过滤我的结果。但是,这些过滤器并不相互排斥,这意味着不止一个可以为真。

显示的代码只允许一个过滤器工作,我想我需要想出一种方法来使 showData 动态,但我不太确定如何。

const filters = {
letter: {
A: false,
B: false,
C: false,
D: false,
E: false
},
number: {
1: false,
2: false,
3: false,
4: false
},
//...
};

const data = [
{
letter: "A",
number: "1",
},
{
letter: "B",
number: "1",
},
{
letter: "B",
number: "2",
},
//...
],

const results = data.map((result, index) => {
let showData = true;

if (filters.letter.A) showData = result.letter === "A";
if (filters.letter.B) showData = result.letter === "B";
//...

return (showData && result)
})}

预期输出的一个例子是如果 filters.letter.Afilters.letter.B 都是 true,那么 结果 将返回匹配这两个过滤器的对象数组。

最佳答案

预先在filters.letter中构造一个truthy keys数组,然后可以根据.letter是否存在来设置showCard当前正在迭代的卡片的数量包含在该数组中:

const trueLetterKeys = Object.entries(filters.letter)
.filter(([, val]) => val)
.map(([key]) => key);
// ...
{data.map(({ letter }, index) => {
const showCard = trueLetterKeys.includes(letter);
// ...

当项目不多时没关系,但为了降低复杂性,您可以使用 Set 的 truthy keys 而不是数组,因为 Set' s .has 比数组的 .includes 更快:

const trueLetterKeys = new Set(
Object.entries(filters.letter)
.filter(([, val]) => val)
.map(([key]) => key)
);
// ...
{data.map(({ letter }, index) => {
const showCard = trueLetterKeys.has(letter);
// ...

关于javascript - 如何允许过滤器 bool 值是非互斥的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54491599/

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