2016-03-28 99 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匿名功能的勝利。

相關問題