javascript - 使用 lodash 从数组中过滤冗余对象

标签 javascript lodash

数据

var ranges = [
        { start: 2, end: 5 },
        { start: 8, end: 12 },
        { start: 15, end: 20 },
        { start: 9, end: 11 },
        { start: 2, end: 6 }
    ];

每个对象代表一个范围。我需要删除包含在另一个范围内的范围。 也就是说,在两个冗余对象之间我需要保持更长的范围

我写了这段代码,但我想知道是否有更好的方法使用 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);

输出

[
    { start: 8, end: 12 },
    { start: 15, end: 20 },
    { start: 2, end: 6 }
]

最佳答案

我终于找到了一种使用 uniqWith 实现此目的的简单方法.

var result = _.chain(ranges)
    .orderBy(['end'], ['desc'])
    .uniqWith(function(r1, r2) {
        return Range.contains(r2, r1);
    })
    .value();

关于javascript - 使用 lodash 从数组中过滤冗余对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39043089/

相关文章:

javascript - 如何获取克隆元素的outerHTML?

javascript - 当其他进程正在运行时,React Native onPress 无法触发

javascript - Lodash getOr 为 null

javascript - Lodash 按字母顺序排序

javascript - 有人可以解释这段代码是如何工作的吗?

javascript - 使用 if else 语句的数组大小切片回退

javascript - 如何检索先前打开的窗口的 URL?

node.js - 无法导入lodash

javascript - 当被内存的功能接受功能时,Lodash 内存键?

javascript - 使用 lodash trim 对象键