过滤器会产生一个对象数组,就像使用 lodash 的 operator(%oil%) [重复]
Posted
技术标签:
【中文标题】过滤器会产生一个对象数组,就像使用 lodash 的 operator(%oil%) [重复]【英文标题】:filter results in an array of objects just like operator(%oil%) using lodash [duplicate] 【发布时间】:2018-04-29 13:59:57 【问题描述】:我想根据用户的输入更改过滤对象数组,并使用 LODASH (https://lodash.com/) 创建一个新的匹配对象数组。
let listing = [title: "Courier/Logistics", id: 1, totalWorkers: 1058, openPositions: 0, omani: 99.72,
title: "Information Technology", id: 1, totalWorkers: 2, openPositions: 1, omani: 50,
title: "Oil & Gas", id: 1, totalWorkers: 98, openPositions: 6, omani: 91.84];
我尝试过 lodash _.filter
但这会过滤确切的单词和确切的大小写,然后返回单个搜索的值。
const filtered = _.filter(listing, function(o)
return o.title === "oi";
);
console.log(filtered);
我想像在 mysql 中那样得到结果:
WHERE title like %oi%
它会给出包含该输入的匹配值。
谢谢
【问题讨论】:
===
表示必须相同。如果要进行部分检查,请使用.indexOf
。尝试o.title.indexOf('ol')> -1
或使用正则表达式/ol/i.test(o.title)
我也试过==
。
===
和 ==
检查完整值。您需要的是部分检查。因此正则表达式或 indexOf
你需要更正你的谓词,而不是用`===`检查使用indexOf
方法。喜欢_.filter(listing, v => v.title.indexOf('oi') != -1);
谢谢拉杰什。太好了。
【参考方案1】:
查看sn-p, 用于 lowerCase 以匹配大小写的所有字符串, 在您的示例中,您的字符串“Oil & Gas”是骆驼式的,当您尝试匹配该字符串时,它总是会导致空白数组。
let listing = [title: "Courier/Logistics", id: 1, totalWorkers: 1058, openPositions: 0, omani: 99.72,
title: "Information Technology", id: 1, totalWorkers: 2, openPositions: 1, omani: 50,
title: "Oil & Gas", id: 1, totalWorkers: 98, openPositions: 6, omani: 91.84];
const filtered = _.filter(listing, function(o)
return o.title.toLowerCase().indexOf("oi") > -1;
);
console.log(filtered);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
【讨论】:
请注意,回答重复问题是一种不好的做法。处理此类帖子的正确方法是标记/共享重复链接。【参考方案2】:在您的过滤器功能中,使用包含功能 即
return o.title.includes("oi");
【讨论】:
您不需要.*
。只需检查oi
是否存在。
另外,只是一个指针,这样的基本问题已经回答了。我们应该寻找类似的帖子并将它们标记为重复,而不是回答它们【参考方案3】:
你根本不需要lodash
,
只需使用正则表达式和原生过滤器即可:
listing.filter(o=>o.title.match(/oi/i))
【讨论】:
以上是关于过滤器会产生一个对象数组,就像使用 lodash 的 operator(%oil%) [重复]的主要内容,如果未能解决你的问题,请参考以下文章