Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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 如何映射&x2B;单回路滤波器_Javascript_Node.js - Fatal编程技术网

Javascript 如何映射&x2B;单回路滤波器

Javascript 如何映射&x2B;单回路滤波器,javascript,node.js,Javascript,Node.js,我以前问过这个问题,但我找不到问题/答案 基本上,我想创建以下内容: Array.prototype.filterAndMap = function(){}; 我可以这样使用它的地方: [1,2,3,4,5].filterAndMap(function(){ if(i % 2 === 0){ return i*2; } }); 上述情况将返回: [4,8] 我认为最好的实现方法是使用Array.prototype.reduce…但我不确定 我试图避免

我以前问过这个问题,但我找不到问题/答案

基本上,我想创建以下内容:

Array.prototype.filterAndMap = function(){};
我可以这样使用它的地方:

[1,2,3,4,5].filterAndMap(function(){
     if(i % 2 === 0){
        return i*2;
     }
});
上述情况将返回:

  [4,8]
我认为最好的实现方法是使用Array.prototype.reduce…但我不确定

我试图避免的是在列表中重复两次:

   [1,2,3,4,5].filter(function(){
         return i % 2 === 0;
    })
    .map(function(i){
         return i * 2;
    });

您可以迭代该数组,如果有效,则返回该值;如果无效,则返回空数组

var数组=[1,2,3,4,5],
结果=数组.reduce(函数(r,a){
返回r.concat(a%2?[]:2*a);
}, []);

控制台日志(结果)您可以迭代数组,如果有效,则返回值;如果无效,则返回空数组

var数组=[1,2,3,4,5],
结果=数组.reduce(函数(r,a){
返回r.concat(a%2?[]:2*a);
}, []);

控制台日志(结果)
reduce
肯定会奏效:

[1,2,3,4,5].reduce((arr, cur) => { 
   if(cur % 2 == 0){
      arr.push(cur * 2); 
   }
   return arr;
}, []);   // => [2, 4]

reduce
肯定会奏效:

[1,2,3,4,5].reduce((arr, cur) => { 
   if(cur % 2 == 0){
      arr.push(cur * 2); 
   }
   return arr;
}, []);   // => [2, 4]

很可能无法将这两种方法(
.map
.filter
)结合起来,因为
.filter
不对元素执行任何逻辑操作,并且
.map
始终返回给定数组中的每个元素。您可以尝试
.reduce
方法,只返回满足给定条件的元素

const arr=[1,2,3,4,5];
常数r=arr.reduce((s,a)=>(a%2?null:s.push(a*2,s),[]);

控制台日志(r)
可能不可能将这两种方法(
.map
.filter
)结合起来,因为
.filter
对元素不执行任何逻辑,并且
.map
始终返回给定数组中的每个元素。您可以尝试
.reduce
方法,只返回满足给定条件的元素

const arr=[1,2,3,4,5];
常数r=arr.reduce((s,a)=>(a%2?null:s.push(a*2,s),[]);

控制台日志(r)正如您所说,减少可能是一条出路:

constmyarray=[1,2,3,4,5];
函数mapAndFilter(数组、filterFunc、mapFunc){
返回数组.reduce((p,c)=>{
if(filterFunc(c))p.push(mapFunc(c));
返回p;
}, []);
}
常量mapFilteredArray=mapAndFilter(myArray,x=>x%2==0,x=>x*2);

控制台日志(mapFilteredArray)正如您所说,减少可能是一条出路:

constmyarray=[1,2,3,4,5];
函数mapAndFilter(数组、filterFunc、mapFunc){
返回数组.reduce((p,c)=>{
if(filterFunc(c))p.push(mapFunc(c));
返回p;
}, []);
}
常量mapFilteredArray=mapAndFilter(myArray,x=>x%2==0,x=>x*2);

控制台日志(mapFilteredArray)根据您的示例代码,您的问题已经以特定的方式得到了回答

如果您试图实现的是一个通用函数,用于
过滤
映射
(虽然它不是
映射
,但它是
减少
),这就是您要寻找的:

var filterAndReduce = function(arr, filterFn, fn) {
  return arr.reduce(function(r, a) {
        return r.concat(filterFn(a) ? [] : fn(a));
  }, []);
};
您可以这样使用它:

filterAndReduce([1,2,3,4,5], function(i) {
     return i % 2;
},
function(i) {
    return i * 2
});

根据您的示例代码,您的问题已经以特定的方式得到了回答

如果您试图实现的是一个通用函数,用于
过滤
映射
(虽然它不是
映射
,但它是
减少
),这就是您要寻找的:

var filterAndReduce = function(arr, filterFn, fn) {
  return arr.reduce(function(r, a) {
        return r.concat(filterFn(a) ? [] : fn(a));
  }, []);
};
您可以这样使用它:

filterAndReduce([1,2,3,4,5], function(i) {
     return i % 2;
},
function(i) {
    return i * 2
});