gpt4 book ai didi

javascript - Ramda 小组然后将 sibling 转换为 child

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:58:33 26 4
gpt4 key购买 nike

在 ramda.js 中,我如何按字段对列表进行分组和排序,然后将每个组中除第一项以外的所有项都移动到该项的子项中?

例如,在下面我按名称分组并按日期降序排序的地方:

[{ id: 1, name: 'bob', date: '2007-03-05', count: 15},
{ id: 2, name: 'bob', date: '2007-03-04', count: 32},
{ id: 3, name: 'bob', date: '2007-03-01', count: 27},
{ id: 4, name: 'jack', date: '2007-03-04', count: 3},
{ id: 5, name: 'jack', date: '2007-02-22', count: 5}]

进入

[{ id: 1, name: 'bob', date: '2007-03-05', count: 15,
children: [{ id: 2, name: 'bob', date: '2007-03-04', count: 32},
{ id: 3, name: 'bob', date: '2007-03-01', count: 27}]
},
{ id: 4, name: 'jack', date: '2007-03-04', count: 3,
children: [{ id: 5, name: 'jack', date: '2007-02-22', count: 5}]
}
]

我知道我可以用 R.head 抓取整个列表的顶部项目,其余的用 R.tail 抓取,然后用 R.merge 将它添加为子项,但我不知道如何抓取列表中组的顶部或尾部。

最佳答案

另一种方法:

const fn = pipe(
groupBy(prop('name')),
values,
map(lift(assoc('children'))(tail, head))
);

如果你想在其中包含排序,你可以在 values, 之后添加:

  map(sort(descend(prop('date')))),

如果这是晦涩难懂的:map(lift(assoc('children'))(tail, head)) 您可以将其替换为等效的:

  map((group) => assoc('children', tail(group), head(group)))

你可以在 Ramda REPL 上看到这个 Action .

关于javascript - Ramda 小组然后将 sibling 转换为 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42616003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com