条件判断不外乎是“与“”或“”非”的排列组合,其中“与”条件得参与“与”操作得每一项都要满足才是真,只要有一条不满足就为假,而“或”操作只要有一项参与“或”操作得项为真,结果就为真。
javascript里的&&和||是“短路运算符”,如果&&运算符的前面的运算结果为false,则不会再去计算&&后面的操作;如果||运算符前面的运算结果为true,则不去再去计算||后面的操作。
这样可以根据具体情况,调整运算的先后顺序,使得计算量最少。
比如有这样一个场景,有一个应用对企业的某些特定组织下的领导和员工以及某些特定项目组的负责人和成员开放,当然每人进去会根据其角色获得不同权限。需要先判断该用户是否有访问该应用的权限。
一般是这样设计
matchuser=orgs.find(item=>( item.projleaders.find(itm=>(itm.userid==args.userid))!=undefined ))
||orgs.find(item=>( item.projmembers.find(itm=>(itm.userid==args.userid))!=undefined ))
||projs.find(item=>( item.projleaders.find(itm=>(itm.userid==args.userid))!=undefined ))
||jprojs.find(item=>( item.projmembers.find(itm=>(itm.userid==args.userid))!=undefined ));
如果该企业的组织人员比较多,而项目组人员较少,那么可以考虑改一下顺序,调整 为:
matchuser=projs.find(item=>( item.projleaders.find(itm=>(itm.userid==args.userid))!=undefined ))
||jprojs.find(item=>( item.projmembers.find(itm=>(itm.userid==args.userid))!=undefined ))
||orgs.find(item=>( item.projleaders.find(itm=>(itm.userid==args.userid))!=undefined ))
||orgs.find(item=>( item.projmembers.find(itm=>(itm.userid==args.userid))!=undefined ));
这样非组织人员匹配效率就很高,而非项目人员匹配效率降低的也不明显。
当然具体深入讨论的话,还有各种情况的概率分布需要考虑到。
原则就是能尽量能抄近路得到结果,避免多的计算量。