2016-04-07 3 views
2

мне было интересно, если есть лучший способ сделать это:Объединить два свойства вместе в ramda.js

var books = [ 
    { 
     title: 'Some Book', 
     author: { 
     firstName: 'John', 
     lastName: 'Doe' 
     } 
    }, 
    { 
     title: 'Another Book', 
     author: { 
     firstName: 'Jane', 
     lastName: 'Smith' 
     } 
    } 
]; 

var getNames = R.pipe(
    R.prop('author'), 
    R.props(['firstName', 'lastName']), 
    R.join(' ') 
); 

console.log(R.map(getNames, books)); 

Поэтому в основном я пытаюсь получить полные имена, комбинируя два свойства вместе. Это работает, но мне было интересно, есть ли лучший (более короткий) способ сделать это в Ramda? Я просмотрел документацию, но есть некоторые функции, которые я пока не совсем понимаю. Так вот почему я прошу здесь .. :)

скрипку: https://jsbin.com/jidiwejatu/edit?js,console

------------------- EDIT ------- ----------

Это довольно простой пример, но если мне пришлось объединять свойства с разных путей, вот что становится более сложным, я думаю, так как мне пришлось бы использовать R.path, чтобы добраться до каждое свойство. Я прав?

ответ

3

Вы можете использовать juxt (Добавлено в v0.19.0), чтобы получить массив все, что вы хотите от объекта:

var getNames = R.pipe(
    R.juxt([ 
     R.path(['author', 'firstName']), 
     R.path(['author', 'lastName']) 
    ]), 
    R.join(' ') 
); 
Смежные вопросы