我有對象的數組:過濾器獨特的和重複的對象
data = [{"origin":"SJU","dest":"JFK","rank":48},{"origin":"JFK","dest":"SJU","rank":21},{"origin":"IAD","dest":"LAX","rank":31},{"origin":"LAS","dest":"SJU","rank":21}]
我試圖提取所有複製&唯一對象BY「出身」 &「目標」。因此,這2是相同的,忽略了排名鍵
{origin:'JFK',dest:'SJU',rank:21}
{"origin":"SJU","dest":"JFK","rank":48}
基本上我想要2個獨立的陣列:
duplicates=[{"origin":"SJU","dest":"JFK","rank":48},{"origin":"JFK","dest":"SJU","rank":21}]
unique = [{"origin":"IAD","dest":"LAX","rank":31},{"origin":"LAS","dest":"SJU","rank":21}]
使用下劃線,我能夠把這樣的東西扔在一起。但似乎效率低下,只返回重複的數組:
duplicates = _.chain(data).map(function (d) {
var ar = [d.origin, d.dest];
return ar.sort();
}).sortBy(function (d) {
return d
}).groupBy(function (d) {return d}).map(function (d) {
if (d.length > 1) {
return d[0]
}
}).compact().value()
single = _.chain(data).map(function (d) {
var ar = [d.origin, d.dest];
return ar.sort();
}).sortBy(function (d) {
return d
}).groupBy(function (d) {
return d
}).map(function (d) {
if (d.length == 1) {
return d[0]
}
}).compact().value()
我不禁感到有一種更簡單的方法來得到這個。
Ahhhh - 我不確定代碼末尾的[0]。但是,從這個角度來看,我能夠得到我需要的東西。簡單得多。謝謝!''singles = _.chain(groups).filter(function(group){return。group.length == 1; })。flatten()。value()'and'duplicates = _.chain(groups ).filter(function(group){return)返回group.length> 1; })。flatten()。值()' – user3760167
@ user3760167是的,我一直在努力與Underscore那裏:)它應該現在返回正確的值。 –
@ user3760167避免兩次過濾並且不需要它會更有效。只需一次建立'dupes'和'uniques'。 – plalx