gpt4 book ai didi

javascript - 如何使用 Lodash 通过多个潜在属性过滤对象集合?

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

我正在构建一个简单的过滤用户界面。我想使用逻辑 AND 来过滤对象集合,其中对象的匹配取决于任意一组键中每个对象的多个潜在值。要过滤的对象如下所示:

collection = [
{
'Kind': 'Instrument',
'Color': 'Orange',
'Shape': 'Square',
'Name': 'Foobar',
},
...
]

用户的点击式过滤结果如下所示:

filter = {
'Color': ['Red', 'Orange', 'Yellow'],
'Shape': ['Circle']
}

在本例中,我想将集合过滤为以下所有对象:

  • 颜色是红色或橙色或黄色
  • 并且形状是圆形

filter 对象具有任意数量的键,因此我无法轻松编写如下所示的手动过滤器函数:

results = _.filter(collection, item => {
return _.includes(['Red', 'Orange', 'Yellow'], item['Color']) && _.includes(['Circle'], item['Shape'])
})

使用 Lodash 实现此目的最简洁的方法是什么?我是否需要为 _.filter 内的 collection 中的每个项目循环遍历 filter 中的每个键,还是有更好的方法?

附注我没有合适的语言来谈论我想做的事情。描述这个问题的最佳关键字是什么?

最佳答案

你们非常接近:

const collection = [
// Won't be in the output.
{
'Kind': 'Instrument',
'Color': 'Orange',
'Shape': 'Square',
'Name': 'Foobar',
},
// Will be in the output.
{
'Kind': 'Instrument',
'Color': 'Orange',
'Shape': 'Circle',
'Name': 'Foobar',
},
// Won't be in the output.
{
'Kind': 'Derp',
'Color': 'NoWorky',
'Shape': 'HAHAHAHA',
'Name': 'uWin',
}
];

const filter = {
'Color': ['Red', 'Orange', 'Yellow'],
'Shape': ['Circle']
};

const results = _.filter(collection, (item) => {
return _.chain(filter)
.keys()
.reduce((currentBoolean, next) => {
console.log(currentBoolean, next, filter[next], item[next]);
return _.isNil(item[next]) ? currentBoolean : _.includes(filter[next], item[next]) && currentBoolean;
}, true)
.value();

// This doesn't work because you're trying to do arbitrary keys.
// return _.includes(filter.Color, item.Color) && _.includes(filter.Shape, item.Shape));
});

console.log(results);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>

关于javascript - 如何使用 Lodash 通过多个潜在属性过滤对象集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49157849/

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