2016-03-28 15 views
1

In der Dokumentation von sortBy heißt es, dass wir R.prop verwenden können, um ein Objekt nach seinem Feld zu sortieren. Aber wenn ich nach einem verschachtelten Feld sortieren muss, funktioniert es nicht. Zum Beispiel funktioniert R.prop ('id.number') nicht.Sortierung mit verschachtelten Feld in ramda.js

var items = [{id:3},{id:1},{id:2}]; 
var sorter = R.sortBy(R.prop('id')); 
sorter(items) 

funktioniert gut. Aber wenn ich eine geschachtelte Struktur habe

var items = [{id:{number:3}},{id:{number:1}},{id:{number:2}}]; 
var sorter = R.sortBy(R.prop('id.number')); 
sorter(items) 

gibt mir eine leere Liste. Ich denke, es gibt eine korrekte Art, R.prop zu verwenden, die ich nicht herausfinden kann.

Antwort

3

Sie können R.path verwenden für verschachtelte Objekte zugreifen, so dass Ihr Beispiel würde R.sortBy(R.path(['id', 'number']))

1

Wenn ich mich nicht irre, wird id.number selbst als eine Eigenschaft überprüft, wenn in der Tat gibt es nur die Eigenschaft id. R.prop() überprüft nur eine Ebene nach unten - verschachtelte Strukturen sind nicht in der Lage, und die Suche nach der Eigenschaft number danach funktioniert nicht.

Die Dokumentation besagt, dass sortBy eine Funktion akzeptiert, die ein Element in Betracht zieht. Es folgt auf dem ramda.js REPL getestet und funktioniert:

var items = [{id:{number:3}},{id:{number:1}},{id:{number:2}}]; 
var sorter = R.sortBy(function(item) {return item['id']['number'];}); 
sorter(items) 

Es funktioniert, indem einfach schauen, um die Eigenschaften in Folge auf.

tl; dr Anonymous Funktionen für den Sieg.

Verwandte Themen