我敢肯定,可以获取一个对象并对其进行修改并对其进行过滤,以得到另一个形状,以便在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
答案 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>