使用ramda.js中的嵌套字段进行排序

时间:2016-03-28 06:35:06

标签: javascript ramda.js

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的方法,我无法弄明白。

2 个答案:

答案 0 :(得分:5)

您可以使用R.path来访问嵌套属性,因此您的示例将变为R.sortBy(R.path(['id', 'number']))

答案 1 :(得分:1)

除非我弄错了,id.number本身被检查为属性,实际上只有属性idR.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胜利的匿名函数。