2016-03-28 42 views
1

sortBy的文档中,它说我们可以使用R.prop按照字段对对象进行排序。但是,如果我必须按嵌套字段排序,则不起作用。例如R.prop('id.number')不起作用。在ramda.js中使用嵌套字段进行排序

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,我无法弄清楚。

回答

3

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

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匿名功能的胜利。