2

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 的正确方法。

4

2 回答 2

7

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

于 2016-03-28T07:04:09.827 回答
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 取胜的匿名函数。

于 2016-03-28T06:48:38.373 回答