【问题标题】:Complicated array grouping复杂的数组分组
【发布时间】:2017-03-02 14:00:12
【问题描述】:

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

[{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或下划线,我都试过了,真的不能解决这个问题

【问题讨论】:

  • 在我看来这不像是排序。看起来像组合项目。
  • 不是你想要的排序。此外;在什么情况下您将 from / to 字段分组,因为 userId 对所有人都是相同的。
  • 你的价值观是否不重叠且有序?

标签: javascript underscore.js lodash


【解决方案1】:

您可以检查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; }

【讨论】:

    猜你喜欢
    • 2014-01-27
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 2011-09-21
    • 2017-04-10
    • 1970-01-01
    相关资源
    最近更新 更多