复杂数组分组

Complicated array grouping

我需要你帮助处理这个数组,我真的不知道如何排序:

[{userId: "3t5bsFB4PJmA3oTnm", from: 1, to: 6}, 
{userId: "3t5bsFB4PJmA3oTnm", from: 7, to: 15}, 
{userId: "3t5bsFB4PJmA3oTnm", from: 172, to: 181},
{userId: "3t5bsFB4PJmA3oTnm", from: 182, to: 190}]

进入那个:

[{userId: "3t5bsFB4PJmA3oTnm", from: 1, to: 15},
{userId: "3t5bsFB4PJmA3oTnm", from: 172, to: 190}]

你能帮帮我吗?可以是lodash也可以是underscore,我都试过了,确实解决不了这个问题

您可以检查userId,如果相同,请检查项目是否有序,然后更改to 属性。

它适用于已排序的项目。如果未排序,您可以先进行排序。

data.sort(function (a, b) {
    return a.userId.localeCompare(b.userId) || a.from - b.from;
});

var data = [{ userId: "3t5bsFB4PJmA3oTnm", from: 1, to: 6}, { userId: "3t5bsFB4PJmA3oTnm", from: 7, to: 15 }, { userId: "3t5bsFB4PJmA3oTnm", from: 172, to: 181 }, { userId: "3t5bsFB4PJmA3oTnm", from: 182, to: 190 }],
    result = data.reduce(function (r, a) {
        var last = r[r.length - 1] || {};
        if (last.userId === a.userId && last.to + 1 === a.from) {
            last.to = a.to;
        } else {
            r.push({ userId: a.userId, from: a.from, to: a.to });
        }
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }