我想根据谓词是返回true
还是false
来将JavaScript数组中的值分成两个单独的数组。这可以通过使用Underscore或Lo-Dash的两个操作轻松完成:
var values = [1, 2, 3, 4];
var even = function (num) { return num % 2 === 0; };
var evens = _.filter(values, even);
var odds = _.reject(values, even);
这将在每个值上运行谓词两次,这在这里是正常的,但如果values
被更大的数据集替换,并且even
被替换为计算成本更高,则可能会出现问题谓词。
我查看了Lo-Dash的文档,但在单个操作中看不到任何可以执行此操作的内容。我可以手动编写这样的功能,但这似乎是一个奇怪的遗漏。是否有这样的功能让我失踪?
答案 0 :(得分:5)
下划线有_.partition
:
分区
_.partition(array, predicate)
将数组拆分为两个数组:一个元素的所有元素都满足谓词,另一个元素的元素都不满足谓词。
但似乎Lo-Dash没有(还)拥有它。您可以改为使用groupBy
:
var partition = _.groupBy(values, function(num) { return num % 2 === 0 });
然后自己从partition
对象中拉出两块;我认为这仍然是两个步骤,但只能通过values
。当然,这将对布尔键进行字符串化,但这不应该是一个问题。