javascript - 将范围为 {n} (length prop) 的数组中的值分组到下一项

标签 javascript arrays object range grouping

我不擅长编写复杂的组函数。所以我希望任何人都可以在这里帮助我。我一直在寻找解决方案,但没有找到可以解决我的问题的方法。

我想要的是将数组列表传递给“分组函数”(见下文),该函数按“长度属性”(见数组中的对象)的最大范围将项目分组到下一个数组项目。

我希望我能解释一下我想要实现的目标。

// input
let list = [
    {start: 5, length: 1},
    {start: 8, length: 1},
    {start: 9, length: 1},
    {start: 10, length: 1},
    {start: 11, length: 1},
    {start: 12, length: 1},
    {start: 20, length: 1},
    {start: 24, length: 1},
    {start: 25, length: 1},
    {start: 37, length: 2},
    {start: 39, length: 1},
    {start: 40, length: 1},
];

// group function like
groupedList = groupBy(list, (prevItem, nextItem) => {
    return (nextItem.start - prevItem.start) === prevItem.length;
});

// output
let groupedList = [
  [
    {start: 5, length:1},
  ],
  [
    {start: 8, length:1},
    {start: 9, length:1},
    {start: 10, length:1},
    {start: 11, length:1},
    {start: 12, length:1},
  ],
  [
    {start: 20, length:1},
  ],
  [
    {start: 24, length:1},
    {start: 25, length:1},
  ],
  [
    {start: 37, length:2},
    {start: 39, length:1},
    {start: 40, length:1},
  ],
];

最佳答案

您可以检查前导并将其分组到实际 start 等于前导 startlength 的总和。

var list = [{ start: 5, length: 1 }, { start: 8, length: 1 }, { start: 9, length: 1 }, { start: 10, length: 1 }, { start: 11, length: 1 }, { start: 12, length: 1 }, { start: 20, length: 1 }, { start: 24, length: 1 }, { start: 25, length: 1 }, { start: 37, length: 2 }, { start: 39, length: 1 }, { start: 40, length: 1 }],
    result = list.reduce(function (r, a, i, aa) {
        if (!i || aa[i - 1].start + aa[i - 1].length !== a.start) {
            r.push([a]);
        } else {
            r[r.length - 1].push(a);
        }
        return r;
    }, []);



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

关于javascript - 将范围为 {n} (length prop) 的数组中的值分组到下一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47206866/

相关文章:

javascript - 将 slider 添加到博客文章?

javascript - 在推送到数组之前先搜索多维数组,没有重复数据

java - Hadoop:处理大型序列化对象

java - 如何将对象添加到对象 HashMap 中的已排序集合

javascript - 简单的 jQuery 切换到 $ ("html, body").css( {"overflow": "hidden"}); when opened and then switch to "scroll" when closed

javascript - 如何从复制任务中调用 grunt 提示任务?

c - 如何检查数组中的特定值

c++结构数组 - "This declaration has no storage class or type specifier"

python - 对象的描述符不适用于对象,使用 __slots__

javascript - 检索具有不等于 undefined 的列的所有对象