在ramda.js中合并两个属性

时间:2016-04-07 08:46:36

标签: javascript 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

-------------------编辑-----------------

这是一个简单的例子,但是如果我必须合并来自不同路径的属性,我认为这会变得更加复杂,因为我必须使用R.path来获取每个属性。我是对的吗?

1 个答案:

答案 0 :(得分:4)

您可以使用juxt(在v0.19.0中添加)从对象获取您想要的任何数组:

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