Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 作为param传递的函数应使用同一调用中的另一个param_Javascript_Arrays_Ecmascript 6 - Fatal编程技术网

Javascript 作为param传递的函数应使用同一调用中的另一个param

Javascript 作为param传递的函数应使用同一调用中的另一个param,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我正在js中重新创建过滤器、映射和查找函数。我有一个函数管道,它接受给定的数组,并通过一个函数数组传递它,比如filter,map等等 以下是我的职能: 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];

我正在js中重新创建过滤器、映射和查找函数。我有一个函数管道,它接受给定的数组,并通过一个函数数组传递它,比如filter,map等等

以下是我的职能:

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");
};

但是,在使用管道时,我不应该将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个参数,arr和一个回调。但在管道中,只需要回调

任何帮助都将不胜感激。
谢谢。

没有简单的解决方案,因为您可以在管道创建中直接调用函数过滤器和映射,然后将执行简单的函数

您可以做的一件事是更改过滤器和映射函数,以便它们返回一个带有方法的对象

常量过滤器=回调=>{ 函数执行arr={ 设newArr=[]; 设j=0; 对于let i=0;i{ 函数执行arr{ 设newArr=[]; 对于let i=0;i const arr=['spray'、'limit'、'elite'、'experiant'、'destruction'、'present'] filteritem=>item.length>6.executer //返回[旺盛的,毁灭的,现在的] 现在是管道功能

const pipe=arr,回调=>{ 对于let i=0;i const arr=['喷雾'、'极限'、'精英'、'旺盛'、'破坏'] 管 啊,, [ filteritem=>item.length>6, mapitem,index=>{id:index,name:item} ] //返回[{id:0,名称:'exuberant'},{id:1,名称:'destruction'}]
没有简单的解决方案,因为您可以在管道创建中直接调用函数过滤器和映射,然后将执行简单的函数

您可以做的一件事是更改过滤器和映射函数,以便它们返回一个带有方法的对象

常量过滤器=回调=>{ 函数执行arr={ 设newArr=[]; 设j=0; 对于let i=0;i{ 函数执行arr{ 设newArr=[]; 对于let i=0;i const arr=['spray'、'limit'、'elite'、'experiant'、'destruction'、'present'] filteritem=>item.length>6.executer //返回[旺盛的,毁灭的,现在的] 现在是管道功能

const pipe=arr,回调=>{ 对于let i=0;i const arr=['喷雾'、'极限'、'精英'、'旺盛'、'破坏'] 管 啊,, [ filteritem=>item.length>6, mapitem,index=>{id:index,name:item} ] //返回[{id:0,名称:'exuberant'},{id:1,名称:'destruction'}]
我看到您正在尝试实现一个称为pipe的函数式编程概念

有一个更好的方法来实现你想要实现的目标

不要将数组传递给管道函数,只将map和filter函数传递给管道函数,让管道函数返回另一个函数,该函数接受输入数组并返回从左到右执行每个函数的结果,并将输入数组传递给每个函数

还要更改map和filter函数,以返回另一个函数,该函数将输入数组作为参数,并在迭代数组并将每个元素传递给回调函数后返回新数组

常量过滤器=回调=>{ 返回arr=>{ 设newArr=[]; 设j=0; 对于let i=0;i{ 返回arr=>{ 常数newArr=[]; 对于let i=0;i{ 返回数组=>{ 返回funcs.reduceac,curr=>curracc,数组; }; }; const arr=['spray','limit','elite','experiant','destruction']; 常数结果=管道 filteritem=>item.length>6, mapitem,index=>{id:index, 名称:项目} arr;
console.logresult 我看到您正在尝试实现一个称为pipe的函数式编程概念

有一个更好的方法来实现你想要实现的目标

不要将数组传递给管道函数,只将map和filter函数传递给管道函数,让管道函数返回另一个函数,该函数接受输入数组并返回从左到右执行每个函数的结果,并将输入数组传递给每个函数

还要更改map和filter函数,以返回另一个函数,该函数将输入数组作为参数,并在迭代数组并将每个元素传递给回调函数后返回新数组

常量过滤器=回调=>{ 返回arr=>{ 设newArr=[]; 设j=0; 对于let i=0;i{ 返回arr=>{ 常数newArr=[]; 对于let i=0;i{ 返回数组=>{ 返回funcs.reduceac,curr=>curracc,数组; }; }; const arr=['spray','limit','elite','experiant','destruction']; 常数结果=管道 filteritem=>item.length>6, mapitem,index=>{id:index,name:item} arr;
console.logresult;这里不是filteritem=>item.length>6,而是通过arr=>filterarr,item=>item.length>6,这是我的看法,使用前面提到的咖喱:是的,我在发布此处的问题之前就这样做了,但这不符合要求。使用管道时,我不应将arr传递给过滤器。无论如何,谢谢你。我使用了@gui3的解决方案,它起了作用。这很好,但你们知道,若你们使用这种方法,你们不能再像在你们的问题中那个样单独使用过滤器了,对吧?gui3比Yousaf的更差,而不是filteritem=>item.length>6,pass arr=>filterarr,item=>item.length>6使用前面提到的咖喱语,这是我的看法:是的,我在发布此处的问题之前做了,但这不符合要求。使用管道时,我不应将arr传递给过滤器。无论如何,谢谢你。我使用了@gui3的解决方案,它起了作用。这很好,但你们知道,若你们使用这种方法,你们不能再像在你们的问题中那个样单独使用过滤器了,对吧?正如我的评论所示,gui3比Yousaf更糟糕,只能使用咖喱。这样,您就不必实现整个执行构造,只需使用curry,就像我的注释所示。这样,您就不必实现整个execute构造。
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' }]