1

我想通过其中包含的对象的两个属性对我的 JavaScript 对象数组进行分组。

我试过下划线 groupBy ,它似乎一次只接受一个属性。

_.groupBy([{'event_date':'2013-10-11', 'event_title':'Event 2'}, {'event_date':'2013-01-11', 'event_title':'Event 1'}], 'event_title')

我的问题是......有没有办法通过它的两个属性对一组对象进行分组。

就像在红宝石中

[#<struct Event event_date=2013-10-11, event_title=Event 2>, #<struct Event  event_date=2013-01-11, event_title=Event 1>].group_by{|p| p.event_date and p.event_title}
4

1 回答 1

5

来自精美手册

通过...分组 _.groupBy(list, iterator, [context])

将集合拆分为集合,按通过迭代器运行每个值的结果进行分组。如果迭代器是字符串而不是函数,则按迭代器命名的属性对每个值进行分组。

因此,您可以将函数传递给_.groupBy,结果将按该函数的结果分组。这只是意味着您需要一个可以为您的组生成简单键的功能。不幸的是,JavaScript 中的对象键是字符串,因此您不能(可靠地)使用返回键数组的函数,就像您在 Ruby 中所做的那样,但您可以将它弄混一下:

_(a).groupBy(function(o) {
    return o.event_title + '\x00' + o.other_key;
});

我猜这'\x00'不会出现在您的文件中event_title,但您可以使用适用于您的数据的任何分隔符。

演示:http: //jsfiddle.net/ambiguous/hwg3p/

于 2013-07-26T17:24:51.467 回答