Javascript 使用array.filter()返回具有包含关键字的值的对象

Javascript 使用array.filter()返回具有包含关键字的值的对象,javascript,arrays,Javascript,Arrays,我正在使用node.js,有一个名为products的数组,其结构如下: [{product_id:'阿迪达斯训练鞋', 标题:“阿迪达斯训练鞋”, description:'description', 品牌:“品牌”, 变体:[[Object],[Object]], 缩略图_url:'url'}, {产品编号:'nike running shoes', 标题:“Nike跑步鞋”, description:'description', 品牌:“品牌”, 变体:[[Object],[Object]

我正在使用node.js,有一个名为
products
的数组,其结构如下:

[{product_id:'阿迪达斯训练鞋',
标题:“阿迪达斯训练鞋”,
description:'description',
品牌:“品牌”,
变体:[[Object],[Object]],
缩略图_url:'url'},
{产品编号:'nike running shoes',
标题:“Nike跑步鞋”,
description:'description',
品牌:“品牌”,
变体:[[Object],[Object],[Object],[Object]],
缩略图_url:'url'},
{产品编号:'vans运动鞋',
标题:“Vans运动鞋”,
description:'description',
品牌:“品牌”,
变体:[[Object],[Object],[Object]],
缩略图\u url:'url'}]

我还有一个config.json文件,其中包含我的关键字列表(以及其他内容),如下所示:

{
“关键词”:[
“货车”,
“耐克”]
}

我想使用
products.filter()
筛选此数组,并返回其
product.title
包含
config.keywords
中任何我的关键字的对象(产品)


我是javascript的初学者,而且我正在使用ES6,所以这让我有点困惑。如果使用不同于ES6的js版本更容易,我很乐意切换。另外,在提出这个问题之前,我花了很多时间进行研究,希望它不会重复

您可以结合使用
过滤器
一些

let filtered = products
    .filter(product => 
        product.title.split(' ')
            .some(s => config.keywords.includes(s.toLowerCase())))
const-config={
“关键词”:[
“货车”,
“耐克”
]
}
让产品=[{
产品编号:“阿迪达斯训练鞋”,
标题:“阿迪达斯训练鞋”,
description:'description',
品牌:“品牌”,
变体:[
[对象],
[对象]
],
缩略图url:“url”
},
{
产品编号:“nike running shoes”,
标题:“Nike跑步鞋”,
description:'description',
品牌:“品牌”,
变体:[
[对象],
[对象],
[对象],
[对象]
],
缩略图url:“url”
},
{
产品编号:“vans运动鞋”,
标题:“Vans运动鞋”,
description:'description',
品牌:“品牌”,
变体:[
[对象],
[对象],
[对象]
],
缩略图url:“url”
}
]
让filtered=products.filter(product=>product.title.split(“”)。一些(s=>config.keywords.includes(s.toLowerCase()))
console.log(已过滤)
如果在产品标题(包括)中发现至少一个配置关键字(some),则返回true

如果不需要区分大小写,您可以放弃
.toLowerCase()
s

let keywords = ["vans", "nike" ]

let filteredObject = product.filter(obj => {
   return keywords.some((val => {
       return obj.title.toLowerCase().includes(val); 
   })
})
var filtered=products.filter(函数(项){
var标志=假;
config.keywords.forEach(函数(word){
var result=item.title.toLowerCase().indexOf(word);
如果(结果!=-1){
flag=true;
}
});
返回标志;

});这非常有效,谢谢!如果我研究了大约100个这样的阵列,每个阵列有50-100个产品,您认为这是最省时的方法吗?即使这只会省下一些钱seconds@barnesc因此,您可以确保您的配置关键字始终是小写的,这样您就不需要保持
toLowerCase()
ing,我想为了实现更极端的优化,您可以做一些事情,比如将
.includes(str)
更改为
.indexOf(str)!==-1
-但您甚至需要数千万个阵列来测量差异。这里不需要极端优化。我只需要确保我的关键字都是小写,谢谢!
let keywords = ["vans", "nike" ]

let filteredObject = product.filter(obj => {
   return keywords.some((val => {
       return obj.title.toLowerCase().includes(val); 
   })
})