gpt4 book ai didi

javascript - 我可以让这个函数定义更短吗?

转载 作者:行者123 更新时间:2023-11-29 10:42:26 25 4
gpt4 key购买 nike

我正在尝试在我的 JavaScript 应用程序中更多地转向函数式编程。我目前使用图书馆 ramda作为这个的基础库。

我的愿望:

  1. 创建一个函数 findWithId(id, list),它返回列表中具有与输入 id 匹配的属性 _id 的项目。
  2. 尽可能短的实现它,尽可能依赖现有代码。

目前取得的成绩:

我的基础是 R.find 有这个定义
查找::(a -> bool 值) -> [a] -> a |不明确的
我尝试了如下所示的一些不同的解决方案:

//Using ramdajs (ramdajs.com)
var hasId = R.curry(function(id, item) {
return item._id === id
});

//This doesn't work
var findWithId_v1 = R.find(hasId);

//This works but can I make it as short as v1?
var findWithId_v2 = function(id, list) {
return R.find(hasId(id), list);
}

问题

我可以使用标准函数式编程工具(如 compose、curry 等)使 findWithId_v2findWithId_v1 一样短吗?

Plunker 演示

http://plnkr.co/edit/xAYx15yk6lBzutdAL9HC?p=preview

最佳答案

Ramda 确实有一个函数可以帮助解决这个问题,一个叫做 useWith。如果你能想到一个更好的名字,我会喜欢的。我有 asked that before .

你可以这样使用:

var findById = R.useWith(R.find, hasId, R.identity);

var find5 = findById(5);
find5([{id:3}, {id:5}]); //=> {id:5}
findById(5, [{id:3}, {id:5}]); //=> {id:5}

您不必在上面提供 R.identity。这也可以,尽管我更愿意明确:

var findById = R.useWith(R.find, hasId);

useWith “接受函数 fn 和任意数量的转换器函数,并返回一个新函数。当调用新函数时,它调用函数 fn,参数包含以下结果:在新函数的连续参数上调用每个提供的处理程序”

关于javascript - 我可以让这个函数定义更短吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26178152/

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