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