gpt4 book ai didi

javascript - 如何编写函数以便内部应用程序隐式接收外部参数?

转载 作者:行者123 更新时间:2023-11-28 07:45:14 26 4
gpt4 key购买 nike

编辑:我已将其标记为 Can I make this function defenition even shorter? 的重复项,它在功能上相同(两个双关语),并且从作者之一那里得到了很好的答案Ramda 库。

这是一个更多出于学术好奇心而非实际需要的问题。

我正在尝试 Can I make this function defenition [sic] even shorter? 库,它强调“无点”函数组合风格。

假设我有一个对象数组,例如

var things = [
{id: "a", value: 234},
{id: "b", value: 345},
{id: "c", value: 456}
]

我想要一个函数来按 id 返回元素(或者至少目前是按 id 匹配的列表)。在 native JavaScript 中,我可以说

var byId = function(id, arr) { return arr.filter(function(o) { return o.id === id; }); };

然后 byId('c', things) 会给我一个仅包含第三项的数组。

在 Ramda 中,我可以更简洁地完成此操作,无需引用数据:

var byIdRam = function(id) { return R.filter(R.propEq('id', id)); }

结果是一个“柯里化(Currying)”函数,因此 byIdRam('c')(things) 给出与第一个版本相同的结果。

我感觉剩下的 lambda 也是不必要的,但我不知道如何在不显式引用 id 的情况下编写函数。有谁知道更好的写法吗?

更新答案很简单

var byId = R.useWith(R.find, R.propEq('id'))

这也给出了我想要的语义,它返回单个元素或 undefined 。不错!

最佳答案

如果我猜对了,你需要这样的东西:

var byIdC = function () {

var results = things.filter(function (o) {return o.id === "c";})

return results.length ? results[0] : null;

};

或者使用您的 Ramda 库:

var byIdC = function () {

var results = R.filter(R.propEq("id", "c"))(things);

return results.length ? results[0] : null;

};

关于javascript - 如何编写函数以便内部应用程序隐式接收外部参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27512340/

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