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

Sorting using nested field in 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)

returns 我是一个空列表。我想有一个正确的使用方法 R.prop 我无法弄清楚。

除非我弄错了,否则 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 获胜的匿名函数。

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