匹配所有值,替换为OR运算符

时间:2014-01-23 17:26:42

标签: javascript

这是第一个按预期工作的代码示例:在其余代码中,它用作过滤器,将匹配来自myids的2个项目,其中objectId匹配tWOsQhsP2Z和sStYrIU6lJ:

return  myids.objectId === "tWOsQhsP2Z" || myids.objectId === "sStYrIU6lJ";

因为我需要从数组中传递任意数量的id,所以我试图像这样重构代码:

return  myids.objectId === ("tWOsQhsP2Z" || "sStYrIU6lJ");

这个新代码的问题是使用返回值的过滤器只返回一个项目,objectId为tWOsQhsP2Z。

你知道如何重构第二个代码,所以我保留单个代码“myids.objectId”但返回所有objectIds值的匹配?

3 个答案:

答案 0 :(得分:1)

您可以使用switch

switch (myids.objectId) {
  case "tWOsQhsP2Z":
  case "sStYrIU6lJ":
    return true;
}
return false;

答案 1 :(得分:1)

听起来你需要像underscore.js contains()这样的方法,会让事情变得更加简单。

e.g。

return _.contains(arrayOfIds, myids.objectId);

答案 2 :(得分:0)

如果您要搜索值的数组,并且列表很长和/或您经常搜索,则可以将列表转换为对象,然后执行属性查找。搜索数组效率要高得多。

对于一个简单的常量情况,您的示例如下:

return  myids.objectId in {"tWOsQhsP2Z": 1, "sStYrIU6lJ": 1};

如果您从服务器生成或动态的数组开始:

var knownIds = [ ... ];

然后你可以将它转换为地图:

var idMap = knownIds.reduce(function(m, v) {
  m[v] = 1;
  return m;
}, {});

现在你的查询很简单:

return myids.objectId in idMap;