使用 lodash 在集合中进行通配符搜索

Posted

技术标签:

【中文标题】使用 lodash 在集合中进行通配符搜索【英文标题】:Wildcard Search in a collection with lodash 【发布时间】:2017-05-13 02:46:40 【问题描述】:

我有一个如下所示的数组,我想进行通配符搜索并检索相应的值。这不会给我任何结果,如果有更好的方法可以帮助我。我在我的 nodejs 应用程序中使用 lodash 实用程序。

var allmCar = [
  
    "_id": ObjectId("5833527e25bf78ac0f4ca30e"),
    "type": "mCar",
    "value": "ABDC",
    "__v": 0
  ,
  
    "_id": ObjectId("5833527e25bf78ac0f4ca30e"),
    "type": "mCar",
    "value": "XYZ ABD",
    "__v": 0
  ,
  
    "_id": ObjectId("5833527e25bf78ac0f4ca30e"),
    "type": "mCar",
    "value": "FGHJ",
    "__v": 0
  
]

_.find(allmCar, 
  value: 
    $regex: 'XYZ'
  
)

我最终使用 _.includes 如下

_.each(allmCar,function(car)
    if(_.includes('XYZ', car.value)===true)
    return car;
)

【问题讨论】:

我认为allmCar 是一个数组,而不是一个对象。 @thefourtheye,是的,你是对的,它是一个数组。 您是否正在寻找类似于我在回答中显示的内容?因为默认情况下,正则表达式不能与 _.find 一起使用 您需要指定在此上下文中“更好”的含义。此外,这个问题可能适用于Code Review,只要 (a) 您的代码按预期工作,(b) 您的代码是真实代码,而不是示例代码,并且 (c) 您的代码包含在这个问题。如果您希望通过同行评审来改进代码的各个方面,请将其发布在 Code Review 上。 【参考方案1】:

你可以对传递给_.find的函数做同样的事情,像这样

_.find(allmCar, function(mCar) 
  return /XYZ/.test(mCar.value);
);

或者用箭头函数,

_.find(allmCar, (mCar) => /XYZ/.test(mCar.value));

这会将传递给集合的所有项目的函数应用,如果一个项目返回true,则该项目将被返回。

【讨论】:

感谢您的回复。这适用于通配符搜索吗?我仍然没有看到它返回任何价值。这个 .test 是做什么的,请你解释一下。 @AjaySrikanth RegExp#test 检查传递的字符串是否与正则表达式匹配。

以上是关于使用 lodash 在集合中进行通配符搜索的主要内容,如果未能解决你的问题,请参考以下文章

在雄辩的 Where 子句中使用类似通配符的语法在两个字符串之间进行搜索

使用 C# 对 StackExchange.Redis 哈希中的字段进行通配符搜索

MySQL基础之MySQL必知必会用通配符进行过滤

为啥使用 C#/ElasticSearch 进行此 NEST 通配符搜索没有返回任何文档?

用正则表达式进行搜索

MySQL--用通配符进行过滤(LIKE操作符)