javascript - 带下划线或条件的下划线(下划线、lodash 或任何其他解决方案)

标签 javascript underscore.js lodash

我实现了一个 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,但到目前为止还没有成功。我想要一个在最少的线路上完美运行的解决方案。我们鼓励提出任何其他让它变得更好的建议。

jsFiddle

最佳答案

这是一个有趣的问题,感谢你让我注意到 Rahul!

我想出了一个使用下划线辅助函数(尽管没有链接)来解决这个问题的函数。它有 2 个参数,一个是您开始的 array,另一个是包含您要匹配的属性的 propsObj 数组。

JsFiddle

关于javascript - 带下划线或条件的下划线(下划线、lodash 或任何其他解决方案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36230825/

相关文章:

javascript - Angular 矩没有显示任何东西

javascript - 使用 Canvas 制作圆圈动画 - 如何扩展以填充整个视口(viewport)?

javascript - 如何从数组中获取javascript中的列表

javascript - 无法使用 UnderscoreJS 的 every 函数传递额外的参数

javascript - Firefox 没有为多部分请求设置正确的内容类型

javascript - 我的 Greasemonkey 脚本如何找到具有特定模式的链接?

javascript - _.throttle 使用 RXJS 可观察量实现

JavaScript - 迭代一个表,其对象可以有 2 个名称

javascript - 按相关性排序 : How to sort a list to have matching values first?

javascript - 如何使用lodash编写嵌套for循环?