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

5

我有一个类似下面展示的数组,我想进行通配符搜索并检索相应的值。但是这并没有返回结果,是否有更好的方法可以帮助我?我在我的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
@thefourtheye,是的,你说得对,它是一个数组。 - Ajay Srikanth
你是否正在寻找类似我在答案中展示的内容?因为默认情况下,正则表达式不能与 _.find 一起使用。 - thefourtheye
在这种情况下,您需要明确“更好”的含义。此外,只要(a)您的代码按预期工作,(b)您的代码是真实的代码,而不是示例代码,(c)您的代码包含在问题正文中,这个问题可能适合于代码审查。如果您希望进行同行评审以改进代码的所有方面,请将其发布在代码审查上。 - Heretic Monkey
1个回答

2
您可以通过将函数传递给_.find来执行相同的操作,如下所示。
_.find(allmCar, function(mCar) {
  return /XYZ/.test(mCar.value);
});

或者使用箭头函数:

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

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接