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

时间:2017-11-03 01:22:01

标签: javascript arrays

我正在使用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会更容易,我很乐意切换。此外,我在问这个问题之前已经花了相当多的研究,并希望它不是重复的。

4 个答案:

答案 0 :(得分:1)

const filteredProducts = products.filter((product) => (
  config.keywords.some((keyword) => (
    product.title.toLowerCase().includes(keyword.toLowerCase())
  ))
));
  

如果发现产品标题(包含)中至少有一个配置关键字(某些)返回true。

如果.toLowerCase()不需要不区分大小写,则可以抛弃它。

答案 1 :(得分:0)

您可以使用filtersome

的组合
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;
});