gpt4 book ai didi

javascript - 根据另一个对象过滤对象数组

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

我有一个对象数组,需要按特定条件进行过滤。我无法弄清楚 for 循环中 if 语句的逻辑。我附加了一个代码片段,您可以在其中调整标准并查看我正在尝试解决的问题。非常感谢您的任何想法或建议,谢谢!

根据以下条件,我的foundItems 数组中应该只包含 1 个找到的项目:

const criteria = {
title: 'title',
character: 'Z',
type: ['second'],
};

这应该(并且确实)返回所有三个项目:

const criteria = {
title: 'title',
character: '',
type: [],
};

这应该返回前两项:

const criteria = {
title: 'title',
character: 'R',
type: [],
};

这应该返回所有三个项目:

const criteria = {
title: '',
character: '',
type: ['first','second'],
};

const data = [
{
label: {
title: 'A title',
},
character: 'R',
type: 'first',
},
{
label: {
title: 'Another title',
},
character: 'R',
type: 'second',
},
{
label: {
title: 'A more interesting title',
},
character: 'Z',
type: 'second',
},
];

const criteria = {
title: 'title',
character: 'Z',
type: ['second'],
};

const createRegEx = (value) => {
const regex = value
.split(' ')
.filter(Boolean)
.map((word) => `(?=^.*${word})`)
.join('');

return new RegExp(regex, 'i');
}

const foundItems = [];

for (let i = 0; i < data.length; i++) {
const item = data[i];

if (
item.label.title.match(createRegEx(criteria.title))
|| item.character === criteria.character
|| criteria.type.includes(item.type)
) {
foundItems[foundItems.length] = item;
}
}

console.log(foundItems);

最佳答案

这表明了我认为您的意图。如果需要更正,请告诉我。我冒昧地简化了代码,但我不知道是否需要使用正则表达式。

过滤器方法对每个数据元素应用过滤器,如果过滤器标准,创造一个短语,匹配,返回 true 保留该元素。

三元运算符对于确定输入是否与匹配相关是必需的。如果为空,则不会根据该条件过滤数据。

我认为您错过了最后一点:

const data = [
{
label: {
title: 'A title',
},
character: 'R',
type: 'first',
},
{
label: {
title: 'Another title',
},
character: 'R',
type: 'second',
},
{
label: {
title: 'A more interesting title',
},
character: 'Z',
type: 'second',
},
];

const criteria = {
title: '',
character: 'R',
type: ['second'],
};

const foundItems = data.filter(item=>{
let t = (criteria.title.length)
? item.label.title.includes(criteria.title)
: true;
let c = (criteria.character.length)
? item.character === criteria.character
: true;
let p = (criteria.type.length)
? criteria.type.includes(item.type)
: true;
return t && c && p;
});
console.log(foundItems);

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

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