数据
var ranges = [
{ start: 2, end: 5 },
{ start: 8, end: 12 },
{ start: 15, end: 20 },
{ start: 9, end: 11 },
{ start: 2, end: 6 }
];
Run Code Online (Sandbox Code Playgroud)
每个对象代表一个范围.我需要删除包含在另一个中的范围.也就是说,在两个冗余对象之间我需要保持更长的范围.
我写了这段代码,但我想知道是否有更好的方法来实现这个使用lodash.
var Range = {
contains: function(r1, r2) {
return r2.start >= r1.start && r2.end <= r1.end;
}
};
var result = _.chain(ranges)
.filter(function(r2) {
return !_.some(ranges, function(r1) {
return r1 != r2 && Range.contains(r1, r2);
});
})
.value();
console.log(result);
Run Code Online (Sandbox Code Playgroud)
产量
[
{ start: 8, end: 12 },
{ start: 15, end: 20 },
{ start: 2, end: 6 }
]
Run Code Online (Sandbox Code Playgroud)
我终于找到了一种使用uniqWith实现此目的的简单方法。
var result = _.chain(ranges)
.orderBy(['end'], ['desc'])
.uniqWith(function(r1, r2) {
return Range.contains(r2, r1);
})
.value();
Run Code Online (Sandbox Code Playgroud)