gpt4 book ai didi

javascript - 函数式编程/Ramda : Creating a new object by picking nested properties

转载 作者:行者123 更新时间:2023-11-30 15:36:35 25 4
gpt4 key购买 nike

这里是函数式编程新手。我有这个对象:

{ 
_id: '2014d5db-55dc-4078-ae87-382c226d0785',
_source: {
phone: '00447827434313',
...
}
}

最后我想以这种格式拥有它:

{ 
id: '2014d5db-55dc-4078-ae87-382c226d0785',
phone: '00447827434313',
...
}

基本上提取_source,并将_id重命名为id

我在下面创建了这个有效的函数,但我尝试只使用 Ramda 的函数而不是手动创建新对象。我认为这是更“实用”的方式,如果它真的不重要,请告诉我。

const test = o => merge(o._source, { id: o._id })

非常感谢

最佳答案

我不认为有特定的内置 Ramda 函数可以做到这一点。但是在 lensPathviewmap 之上编写一个并不难:

const remap = R.curry((desc, obj) => R.map(path => R.view(R.lensPath(path), obj), desc));

const myExtract = remap({
id: ['_id'],
phone: ['_source', 'phone']
});

myExtract(input);
//=> {"id": "2014d5db-55dc-4078-ae87-382c226d0785", "phone": "00447827434313"}

只有当您的输出被描述为字段的平面列表(当然它们的属性本身可以是对象)时,它才会简单地起作用。但是您从嵌套路径中拉出并推送到嵌套路径的情况不会太难写。不过,我想用户 API 会更难看。

我看不出有什么干净的方法可以让这个点免费并且仍然保持可读性。也许其他人可以做到这一点,但我认为这已经很不错了。

你可以在 Ramda REPL 上看到这个 Action .

关于javascript - 函数式编程/Ramda : Creating a new object by picking nested properties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41447069/

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