Javascript 如何在具有多个条件(JS,React)的JSON上使用.filter()和.includes()方法?
抱歉,如果有一个简单的答案,因为我是新的编程。我正在尝试构建一个web应用程序,该应用程序根据关键字筛选一组引用。我选择了一些用JSON格式化的引号,下面是一个片段:Javascript 如何在具有多个条件(JS,React)的JSON上使用.filter()和.includes()方法?,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,抱歉,如果有一个简单的答案,因为我是新的编程。我正在尝试构建一个web应用程序,该应用程序根据关键字筛选一组引用。我选择了一些用JSON格式化的引号,下面是一个片段: [ { "description": "quote 1", "source": "source a", "keywords": ["filter1"] }, { "description": "quote 2", "source": "sour
[
{
"description": "quote 1",
"source": "source a",
"keywords": ["filter1"]
},
{
"description": "quote 2",
"source": "source b",
"keywords": ["filter1", "filter2"]
},
]
我当前执行筛选的代码如下所示:
quotes.filter((el) => el.keywords.includes(...usersKeywords));
quotes
是上面的JSON数据,usersKeywords
是用户选择的关键字数组(作为字符串)作为过滤器
目前,我的代码成功地过滤JSON以返回引号,只要它至少包含一个关键字。也就是说,只要选择了“filter1”或“filter”,就会包括“quote 2”。理想情况下,我只希望一个报价出现,如果它的所有关键字都被选中
如何更改过滤器,以便所有关键字必须存在才能返回报价 试试下面的方法:
quotes.filter((el) => userKeywords.every(key_word => el.keywords.includes(key_word)));
这将检查userKeywords中的所有元素是否都存在于quote元素的关键字中。您需要使用测试每个用户关键字
const引号=[
{
描述:“引用1”,
来源:“来源a”,
关键词:['filter1'],
},
{
说明:“报价单2”,
来源:“来源b”,
关键词:['filter1','filter2'],
},
];
常量usersKeywords=['filter2','filter1'];
const result=quotes.filter(q=>usersKeywords.every(k=>q.keywords.includes(k));
控制台日志(结果)代码>在当前代码中,只检查引号的关键字数组中是否存在usersKeywords的第一个元素。如果quotes的任何关键字数组元素在userKeywords第一个元素中不存在,则可能会出现错误。在这种情况下,根据下面的代码,您不会得到预期的结果
quotes.filter((el) => el.keywords.includes(...usersKeywords));
根据您的问题,如果您希望在选中所有关键字的情况下显示一个引号,那么您应该对usersKeywords数组应用该方法。
像下面这样
const quotes = [
{
"description": "quote 1",
"source": "source a",
"keywords": ["filter1"]
},
{
"description": "quote 2",
"source": "source b",
"keywords": ["filter1", "filter2"]
},
];
const usersKeywords = ["filter1", "filter2"];
const res = quotes.filter(q => usersKeywords.every(key => q.keywords.includes(key)));
console.log(res);
尝试使用.every()
指示每个el.keywords
应在usersKeywords
中找到:quotes.filter((el)=>el.keywords.every(kw=>usersKeywords.includes(kw))
或者您的意思是每个用户关键字必须出现在当前el.keywords
中quotes.filter((el)=>userKeywords.every(kw=>el.keywords.includes(kw))代码>@slappy似乎是对的。你能把它作为一个答案吗?@LudovitMydla:这是我目前无法承担的责任。这次我让别人来承担这个负担。谢谢你的帮助!现在看来很明显,所以我很感谢大家的支持,这很有魅力。