我实现了一个 mixin 以使用 _.where 添加“或”条件
var arr = [{a:1,b:4}, {a:5}, {a:6}, {a:11}];
_.mixin({
or: function(obj,arr,condition){
return _.chain(arr).where(condition).union(obj).value();
}
});
现在我可以像这样使用它了,它的工作原理有点像 sql 查询
_.chain(arr).where({a:1}).or(arr,{a:11,b:3}).or(arr,{a:2}).value();
//returns [{a:1,b:4}]
_.chain(arr).where({a:1}).or(arr,{a:11}).or(arr,{a:2}).value();
//returns [{a:1,b:4},{a:11}]
_.chain(arr).where({a:1}).or(arr,{a:11}).or(arr,{b:4}).value();
//returns [{"a":1,"b":4},{"a":11}] --no duplicates
但我想找到一个更好的方法来调用 _.or({a:1}),现在我必须每次都传递 arr _.or(arr,{a:1}),作为链式“或"获取第一个对象作为先前执行函数的结果。
有没有办法在链式 mixin 函数中获取整个数组?
我希望下面的代码返回与上面的实现相同的结果。 (就像一个完美的 sql 查询)
_.chain(arr).where({a:1}).or({a:11,b:3}).or({a:2}).value();//returns [{a:1,b:4}]
我的主要关注点是通过下划线来获取它,但实际上任何其他方式(如 lodash)甚至其他一些库或解决方案也可以使用。此外,我们也不需要使用链接,我也在尝试使用 compose,但到目前为止还没有成功。我想要一个在最少的线路上完美运行的解决方案。我们鼓励提出任何其他让它变得更好的建议。
最佳答案
这是一个有趣的问题,感谢你让我注意到 Rahul!
我想出了一个使用下划线辅助函数(尽管没有链接)来解决这个问题的函数。它有 2 个参数,一个是您开始的 array
,另一个是包含您要匹配的属性的 propsObj
数组。
关于javascript - 带下划线或条件的下划线(下划线、lodash 或任何其他解决方案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36230825/