过滤器会产生一个对象数组,就像使用 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%) [重复]的主要内容,如果未能解决你的问题,请参考以下文章

根据属性值用 lodash 过滤对象数组

根据包含的数组内容过滤对象数组。 Vanilla JS,lodash,其他一些与反应相关的技术?

lodash简介

Lodash合并数组与字典对象键值

Lodash

Lodash 在尝试使用未定义的属性进行过滤时排除项目