过滤器独特 &使用下划线复制数组中的对象 [英] Filter unique & duplicate objects in array using underscore
问题描述
我有一个对象数组:
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}]
我正在尝试提取所有重复项 &独特的对象按起源"&目的地".使这两个相同,忽略排名键
I am trying to extract all duplicates & unique objects BY "origin" & "dest". So that these 2 are the same, ignoring the rank key
{origin:'JFK',dest:'SJU',rank:21}
{"origin":"SJU","dest":"JFK","rank":48}
基本上我想要 2 个单独的数组:
Basically I want 2 seperate arrays:
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}]
使用下划线,我可以把这样的东西放在一起.但它似乎效率低下,只返回重复的数组:
using underscore, I was able to throw something like this together. But It seems inefficient and only returns an array of duplicates:
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()
我不禁觉得有一种更简单的方法可以做到这一点.
I can't help but feel there is a much easier way to get this.
推荐答案
引入一个临时变量来保存组可能更容易:
It might be easier to introduce a temporary variable to hold the groups:
var 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}]
var groups = _.groupBy(data, function(item) {
return [item.origin, item.dest].sort();
});
那么:
var duplicates = [],
singles = [];
_.each(groups, function(group) {
if (group.length > 1) {
duplicates.push.apply(duplicates, group);
} else {
singles.push(group[0]);
}
});
这篇关于过滤器独特 &使用下划线复制数组中的对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!