如何根据搜索字符串从对象数组中匹配目标对象
我来帮你搞定这个从对象数组里查找匹配搜索字符串的问题,针对你给出的objArray,这里有几种实用的实现方式:
基础实现:查找所有属性值包含搜索字符串的对象
如果需要检查对象的所有属性值,判断是否包含目标搜索字符串,可以用数组的filter()方法,搭配Object.values()和some()来实现:
var objArray = [ { id: 0, name: 'Object 0', otherProp: '321', secondVal:'stack' }, { id: 1, name: 'O1', otherProp: 'Object 0', secondVal: 'Overflow' }, { id: 2, name: 'Another Object', otherProp: '850', secondVal: 'Context' }, { id: 3, name: 'Almost There', otherProp: '046', secondVal: 'Object 1' }, { id: 4, name: 'Last Obj', otherProp: '78', secondVal: 'test' } ]; // 定义要搜索的字符串 const searchStr = 'Object 0'; // 过滤出符合条件的对象 const matchedObjects = objArray.filter(obj => { // 获取当前对象的所有属性值,检查是否有任意一个值包含搜索字符串 return Object.values(obj).some(value => { // 默认是区分大小写的匹配哦 return String(value).includes(searchStr); }); }); console.log(matchedObjects);
运行这段代码后,会返回id为0和1的两个对象——因为它们分别在name和otherProp属性里包含了'Object 0'。
扩展:大小写不敏感的匹配
如果需要忽略大小写进行匹配(比如搜索'object 0'也能找到结果),可以把搜索字符串和属性值统一转成小写(或大写)后再比较:
const matchedObjectsCaseInsensitive = objArray.filter(obj => { const lowerSearchStr = searchStr.toLowerCase(); return Object.values(obj).some(value => { return String(value).toLowerCase().includes(lowerSearchStr); }); });
扩展:只匹配特定属性
如果你只想检查某个特定属性(比如只看name属性),代码可以更简洁:
// 只匹配name属性完全等于'Object 0'的对象 const matchedByName = objArray.filter(obj => obj.name === searchStr); // 如果是要匹配name属性包含搜索字符串的对象,就用includes: const matchedByNameIncludes = objArray.filter(obj => obj.name.includes(searchStr));
内容的提问来源于stack exchange,提问作者Prasanna
相关产品推荐
相关产品推荐

