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

Sorting using nested field in ramda.js

本文关键字:字段 排序 嵌套 ramda js 使用      更新时间:2023-09-26

在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,但我不知道。

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

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