作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 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/
我想为锦标赛的终点分配一组分数,其中第一名获得 10 分,第二名获得 9 分,依此类推。然后我想合并具有相同团队名称的玩家的积分,没有团队(空)的任何人都不会获得积分。然后返回积分最多的队伍名称(te
我是一名优秀的程序员,十分优秀!