我正在使用node.js并且有一个名为products
的数组,其结构如下:
[ { product_id: 'adidas-training-shoes',
title: 'Adidas Training Shoes',
description: 'description',
brand: 'brand',
variants: [ [Object], [Object] ],
thumbnail_url: 'url' },
{ product_id: 'nike-running-shoes',
title: 'Nike Running Shoes',
description: 'description',
brand: 'brand',
variants: [ [Object], [Object], [Object], [Object] ],
thumbnail_url: 'url' },
{ product_id: 'vans-sneakers',
title: 'Vans Sneakers',
description: 'description',
brand: 'brand',
variants: [ [Object], [Object], [Object] ],
thumbnail_url: 'url' } ]
我还有一个config.json文件,其中包含我的关键字列表(以及其他内容),如下所示:
{
"keywords": [
"vans",
"nike" ]
}
我想使用products.filter()
来过滤此数组,并返回其product.title
包含config.keywords
中任意关键字的对象(产品)。
我是一个非常初学的javascript,我和ES6合作,所以对我来说有点混乱。如果使用ES6以外的其他版本的js会更容易,我很乐意切换。此外,我在问这个问题之前已经花了相当多的研究,并希望它不是重复的。
答案 0 :(得分:1)
const filteredProducts = products.filter((product) => (
config.keywords.some((keyword) => (
product.title.toLowerCase().includes(keyword.toLowerCase())
))
));
如果发现产品标题(包含)中至少有一个配置关键字(某些)返回true。
如果.toLowerCase()
不需要不区分大小写,则可以抛弃它。
答案 1 :(得分:0)
您可以使用filter
和some
let filtered = products
.filter(product =>
product.title.split(' ')
.some(s => config.keywords.includes(s.toLowerCase())))
const config = {
"keywords": [
"vans",
"nike"
]
}
let products = [{
product_id: 'adidas-training-shoes',
title: 'Adidas Training Shoes',
description: 'description',
brand: 'brand',
variants: [
[Object],
[Object]
],
thumbnail_url: 'url'
},
{
product_id: 'nike-running-shoes',
title: 'Nike Running Shoes',
description: 'description',
brand: 'brand',
variants: [
[Object],
[Object],
[Object],
[Object]
],
thumbnail_url: 'url'
},
{
product_id: 'vans-sneakers',
title: 'Vans Sneakers',
description: 'description',
brand: 'brand',
variants: [
[Object],
[Object],
[Object]
],
thumbnail_url: 'url'
}
]
let filtered = products.filter(product => product.title.split(' ').some(s => config.keywords.includes(s.toLowerCase())))
console.log(filtered)
答案 2 :(得分:0)
let keywords = ["vans", "nike" ]
let filteredObject = product.filter(obj => {
return keywords.some((val => {
return obj.title.toLowerCase().includes(val);
})
})
答案 3 :(得分:0)
像这样的东西
var filtered = products.filter(function(item){
var flag = false;
config.keywords.forEach(function(word){
var result = item.title.toLowerCase().indexOf(word);
if (result != -1){
flag = true;
}
});
return flag;
});