使用 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
本身会被检查为 属性,而实际上只有 属性 id
。 R.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']))
在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
本身会被检查为 属性,而实际上只有 属性 id
。 R.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']))