gpt4 book ai didi

javascript - ramda 从基础对象 reshape 对象结构

转载 作者:行者123 更新时间:2023-11-30 14:26:06 25 4
gpt4 key购买 nike

我确信可以获取一个对象并修改它并过滤它以获得另一个形状以便在 api 请求后更容易使用,但不幸的是我无法创建任何不涉及使用的优雅解决方案 pathprop 每个键例如。

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>

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

我已经尝试过 evolve 但这并没有增加新的点,我已经尝试过 lens 但我可能错过了文档中的一些东西,因为我只能修改现有的键或使用 prop 进行过滤。

干杯,

edit. I was able to create a mapping function that will do the job, but is there a better way?

const { prop, path, toUpper, map, compose } = R

const baseObject = {
id: 1,
name: 'object-one',
info: {
items: [
{ name: 'item-one', url: '/images/item-one.jpg' },
]
},
}
// createObjectFromSpec :: { k: f(a) } -> a -> { k: b }
const createObjectFromSpec = spec => baseObj => R.map(f => f(baseObj), spec);
const createObjectTypeOne = createObjectFromSpec({
id: prop('id'),
name: prop('name'),
// image is a new prop not found on the base object
image: path(['info', 'items', 0, 'url']),
})

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

console.log(
createObjectTypeOne(baseObject)
)

console.log(
createObjectTypeTwo(baseObject)
)
<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>

最佳答案

示例中的 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>

关于javascript - ramda 从基础对象 reshape 对象结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51914747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com