gpt4 book ai didi

javascript - Ramda 帮助 : Pointfree implementation w/placeholders to direct arguments

转载 作者:行者123 更新时间:2023-11-29 21:40:19 27 4
gpt4 key购买 nike

这是我第一次使用 ramda。我正在尝试创建一个映射函数,该函数会自动为数组中的每个对象添加一个键。将有助于 react 无状态函数,例如,我们可能有一个带有签名的函数

 ({ prop1, prop2, key }) => ...

和一个数组

 [{ prop1: 'prop one', prop2: 'prop two' }, {...etc}]

这是一个工作示例:

const mapI = R.addIndex(R.map);
const mapAddIndexedProp = R.curry((key, fn) => mapI(R.pipe(R.flip(R.assoc(key)), fn)));
const mapAddKeyProp = mapAddIndexedProp('key');

但是,鉴于我真正想要的是一个接受字符串的函数和一个函数,似乎应该有一种方法可以执行以下操作:

const mapAddIndexedProp = mapI(R.pipe(R.flip(R.assoc(<arg1>)), <arg2>));

但我不知道它是如何工作的。任何想法将不胜感激。

或者,很有可能,有一种更简洁的方法可以使用“over”或 transduce 之类的方法来执行此操作。谢谢!

最佳答案

我认为如果您不尝试坚持不计分的话,这很容易做到:

const addKey = R.curry((key, fn, vals) => 
R.map(obj =>
R.assoc(key, fn(obj), obj), vals));

如果您真的也想要索引,可以将其扩展为:

const addKey2 = R.curry((key, fn, vals) => 
R.addIndex(R.map)((obj, idx) =>
R.assoc(key, fn(obj, idx), obj), vals));

你可以这样使用:

const addFullNames = addKey('fullName', person => 
`${person.first} ${person.last}`
);

const initials = person => R.head(person.first) + R.head(person.last);
const addIds = addKey2('id', (person, idx) => `${initials(person)}_${idx}`)

var people = [
{first: 'Wilma', last: 'Flintstone'},
{first: 'Betty', last: 'Rubble'}
];

addFullNames(people); //=>
// [
// {first: 'Wilma', last: 'Flintstone', fullName: 'Wilma Flintstone'},
// {first: 'Betty', last: 'Rubble', fullName: 'Betty Rubble'}
// ];

addIds(people); //=>
// [
// {first: 'Wilma', last: 'Flintstone', id: 'WF_0'},
// {first: 'Betty', last: 'Rubble', id: 'BR_1'}
// ];

我确信有一种方法可以让这个免分。但我也很确定它看起来会明显不那么优雅。

关于javascript - Ramda 帮助 : Pointfree implementation w/placeholders to direct arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33192345/

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