gpt4 book ai didi

javascript - 作为参数传递的函数应该使用同一调用中的另一个参数

转载 作者:行者123 更新时间:2023-12-02 19:20:22 28 4
gpt4 key购买 nike

我正在 js 中重新创建过滤器、 map 、查找函数。我有一个函数 pipe,它接受给定的数组并将其传递给一个函数数组,例如过滤器、映射等。

这些是我的功能:

const filter = (arr, callback) => {
let newArr = [];
let j = 0;
for (let i = 0; i < arr.length; i++) {
if (callback(arr[i])) {
newArr[j] = arr[i];
j++;
}
}
return newArr;
};

const map = (arr, callback) => {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
newArr[i] = callback(arr[i], i);
}
return newArr;
};

const pipe = (arr, callbacks) => {
console.log(arr, "arr");
console.log(callbacks, "callbacks");
};

我可以像这样使用过滤器,并且该功能运行良好。

const arr = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present']

filter(arr, item => item.length > 6) // returns ["exuberant", "destruction", "present"]

但是,当使用管道时,我不应该将 arr 传递给每个函数。相反,过滤器和映射应该以某种方式从管道中获取 arr 。但由于这些函数是在管道调用中直接调用的,所以我不知道如何实现该功能。

const arr = ['spray', 'limit', 'elite', 'exuberant', 'destruction']

pipe(
arr,
[
filter(item => item.length > 6), // returns ["exuberant", "destruction"]
map((item, index) => ({ id: index, name: item })) // returns [{ id: 0, name: 'exuberant' }, { id: 1, name: 'destruction' }]
]
)

// pipe returns [{ id: 0, name: 'exuberant' }, { id: 1, name: 'destruction' }]

通常过滤器和映射需要 2 个参数,arrcallback。但在管道中它只需要回调。

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

我发现您正在尝试实现一种称为“管道”的函数式编程概念。

有更好的方法来实现您想要实现的目标。

不将数组传递给 pipe 函数,而是仅将 mapfilter 函数传递给 pipe > 函数并让 pipe 函数返回另一个函数,该函数接受输入数组并返回从左到右执行每个函数并将输入数组传递给每个函数的结果。

还更改 mapfilter 函数以返回另一个函数,该函数接受输入数组作为参数,并在迭代数组并传递每个数组后返回一个新数组回调函数的元素。

const filter = callback => {
return (arr) => {
let newArr = [];
let j = 0;
for (let i = 0; i < arr.length; i++) {
if (callback(arr[i])) {
newArr[j] = arr[i];
j++;
}
}
return newArr;
};
};

const map = callback => {
return (arr) => {
const newArr = [];
for (let i = 0; i < arr.length; i++) {
newArr[i] = callback(arr[i], i);
}
return newArr;
};
};

const pipe = (...funcs) => {
return array => {
return funcs.reduce((acc, curr) => curr(acc), array);
};
};

const arr = ['spray', 'limit', 'elite', 'exuberant', 'destruction'];

const result = pipe(
filter(item => item.length > 6),
map((item, index) => ({ id: index, name: item }))
)(arr);

console.log(result);

关于javascript - 作为参数传递的函数应该使用同一调用中的另一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63138171/

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