在sortBy的文档中,它说我们可以使用R.prop通过它的字段对对象进行排序。但是如果我必须按嵌套字段排序,它就不起作用。例如R.prop('id.number')不起作用。
var items = [{id:3},{id:1},{id:2}];
var sorter = R.sortBy(R.prop('id'));
sorter(items)
工作正常。但如果我有一个嵌套结构
var items = [{id:{number:3}},{id:{number:1}},{id:{number:2}}];
var sorter = R.sortBy(R.prop('id.number'));
sorter(items)
给我一个空列表。我想有一种正确的使用R.prop的方法,我无法弄明白。
答案 0 :(得分:5)
您可以使用R.path
来访问嵌套属性,因此您的示例将变为R.sortBy(R.path(['id', 'number']))
答案 1 :(得分:1)
除非我弄错了,id.number
本身被检查为属性,实际上只有属性id
。 R.prop()
只检查一个级别 - 嵌套结构超出了它的能力,并且被要求在不起作用后查找属性number
。
文档指出sortBy
接受一个需要考虑元素的函数。以下是在ramda.js REPL上测试并运行的:
var items = [{id:{number:3}},{id:{number:1}},{id:{number:2}}];
var sorter = R.sortBy(function(item) {return item['id']['number'];});
sorter(items)
只需简单地查找属性即可。
tl; dr胜利的匿名函数。