这是第一个按预期工作的代码示例:在其余代码中,它用作过滤器,将匹配来自myids的2个项目,其中objectId匹配tWOsQhsP2Z和sStYrIU6lJ:
return myids.objectId === "tWOsQhsP2Z" || myids.objectId === "sStYrIU6lJ";
因为我需要从数组中传递任意数量的id,所以我试图像这样重构代码:
return myids.objectId === ("tWOsQhsP2Z" || "sStYrIU6lJ");
这个新代码的问题是使用返回值的过滤器只返回一个项目,objectId为tWOsQhsP2Z。
你知道如何重构第二个代码,所以我保留单个代码“myids.objectId”但返回所有objectIds值的匹配?
答案 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;