如何使用多关键词过滤含tags字段的对象数组(需全匹配)?
多关键词同时匹配的数组过滤实现
现有代码背景
我们有一个宠物对象数组:
const pets = [ {name: "Dog", tags: "ground, pet, active"}, {name: "Cat", tags: "ground, pet, relaxed"}, {name: "Fish", tags: "water, pet, exotic"}, ]
目前已经实现了单个关键词的过滤逻辑,比如搜索"ground":
const search = "ground" const result = pets.filter((pet) => pet.tags.includes(search))
输出结果为:
[ { name: 'Dog', tags: 'ground, pet, active' }, { name: 'Cat', tags: 'ground, pet, relaxed' } ]
需求说明
现在需要实现多关键词数组(比如const search = ["ground", "active"])的过滤,要求仅筛选出tags字段同时包含所有关键词的对象(预期只匹配Dog项)。
实现方案
可以结合Array.every()方法,确保每个关键词都能在当前宠物的tags中找到:
基础实现
const search = ["ground", "active"]; const result = pets.filter(pet => { return search.every(keyword => pet.tags.includes(keyword)); });
执行后输出结果:
[ { name: 'Dog', tags: 'ground, pet, active' } ]
优化建议(可选)
如果担心关键词的匹配精度(比如关键词是"round"时,可能误匹配包含"ground"的字符串),可以先把tags拆分成数组,再用includes匹配:
const search = ["ground", "active"]; const result = pets.filter(pet => { const petTags = pet.tags.split(', '); // 按逗号加空格拆分标签数组 return search.every(keyword => petTags.includes(keyword)); });
这种方式能避免部分字符串的误匹配问题,比如如果有宠物标签是"grounded",不会被关键词"ground"误匹配。
内容的提问来源于stack exchange,提问作者DC37
相关产品推荐
相关产品推荐

