簡體   English   中英

使用下划線groupby將對象數組按多個屬性分組

[英]Using underscore groupby to group an array of objects by more than one attribute

我想通過包含在其中的對象的兩個屬性對對象的JavaScript數組進行分組。

我嘗試過強調下划線groupBy,並且似乎一次只接受一個屬性。

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

我的問題是...有沒有一種方法可以將對象數組按其兩個屬性分組。

就像在Ruby中一樣

[#<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}

精美的手冊中

groupBy _.groupBy(list, iterator, [context])

將集合分為若干集合,並按通過iterator運行每個值的結果進行分組。 如果iterator是字符串而不是函數,請在每個值上按iterator命名的屬性進行分組。

因此,您可以將一個函數傳遞給_.groupBy ,結果將按該函數的結果分組。 這只是意味着您需要一個可以為您的組生成簡單鍵的函數。 不幸的是,JavaScript中的對象鍵是字符串,因此您不能(可靠地)使用返回鍵數組的函數,就像您在Ruby中一樣,但是您可能會感到有些困惑:

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

我猜想'\\x00'不會出現在您的event_title但是您可以對數據使用任何分隔符。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM