如何在对象数组中搜索含指定字符串的匹配项?Lodash代码异常排查
问题分析与解决办法
嘿,我一眼就瞅出你代码里的问题啦!你之所以会拿到单个字符的title,是因为你把单个字符串传给了_.some方法——_.some会把字符串当成字符数组来遍历,所以回调里的title参数每次都是原标题里的一个单个字符,自然没法和查询词匹配啦。
正确的写法(针对你的数据结构)
你的apis数组里每个元素的info.title是单个字符串,根本不需要用_.some来遍历,直接用_.includes检查整个标题是否包含查询词就行:
this.searchResults = this.apis.filter(function(item) { return _.includes(item.info.title, query); });
或者用更简洁的箭头函数:
this.searchResults = this.apis.filter(item => _.includes(item.info.title, query));
额外情况:如果title是数组的话
要是以后你的数据结构变成info.title是字符串数组(比如title: ['title1', 'title2']),那才需要用到_.some,用来检查数组里有没有包含查询词的元素,这时候代码是这样的:
this.searchResults = this.apis.filter(function(item) { return _.some(item.info.title, function(title) { return _.includes(title, query); }); });
总结一下:你之前的错误就是把单个字符串当数组传给_.some了,去掉多余的_.some就能解决问题啦!
内容的提问来源于stack exchange,提问作者Marco Cano
相关产品推荐
相关产品推荐

