ramda从基础对象

时间:2018-08-19 05:24:28

标签: javascript json object ramda.js

我敢肯定,可以获取一个对象并对其进行修改并对其进行过滤,以得到另一个形状,以便在api请求后更容易使用,但是很遗憾,我无法创建任何不涉及使用{ {1}}和path用于每个键,例如

prop
const { prop, path } = R

const baseObject = {
  id: 1,
  name: 'object-one',
  info: {
   items: [
      { name: 'item-one', url: '/images/item-one.jpg' },
    ]
  },
}

const newObj = {
  id: prop('id', baseObject),
  name: prop('name', baseObject),
  // image is a new prop not found on the base object
  image: path(['info', 'items', 0, 'url'], baseObject),
}

console.log(newObj)

任何人都可以告诉我是否有一种方法可以进行优雅的无点对象重塑。似乎应该有一些可以将基础对象作为种子的映射器函数,但是我似乎无法指出它。

我尝试了<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script> <script src="https://codepen.io/synthet1c/pen/KyQQmL.js"></script>,但是并没有添加新的点,我尝试了evolve,但是我可能错过了文档中的内容,因为我只能修改现有的键或像{ {1}}。

干杯

  

编辑。我能够创建一个可以完成这项工作的映射功能,但是有更好的方法吗?

lens
prop

1 个答案:

答案 0 :(得分:2)

示例中的createObjectFromSpec函数在Ramda中以applySpec的形式存在。

const fn = R.applySpec({
  id: R.prop('id'),
  name: R.prop('name'),
  image: R.path(['info', 'items', 0, 'url'])
})

const result = fn({
  id: 1,
  name: 'object-one',
  info: {
   items: [
      { name: 'item-one', url: '/images/item-one.jpg' },
    ]
  },
})

console.log(result)
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>