Javascript 在两个单独的阵列上执行相同的筛选和映射功能

Javascript 在两个单独的阵列上执行相同的筛选和映射功能,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我正在尝试过滤,然后映射两个单独的数组。通常我只是将它们组合起来,但我希望将它们分开,以便以后更容易地进行一些逻辑分析 基本上,我有两个阵列: const arr1 = [ {obj1}, {obj2}, {obj3} ]; const arr2 = [ {obj4}, {obj5}, {obj6} ]; 我想在这些阵列上运行(2)个过滤器和(1)个过滤器,如下所示: arr1.filter(obj => obj.color !== 'red') .filter(obj => ob

我正在尝试过滤,然后映射两个单独的数组。通常我只是将它们组合起来,但我希望将它们分开,以便以后更容易地进行一些逻辑分析

基本上,我有两个阵列:

const arr1 = [ {obj1}, {obj2}, {obj3} ];
const arr2 = [ {obj4}, {obj5}, {obj6} ];
我想在这些阵列上运行(2)个过滤器和(1)个过滤器,如下所示:

arr1.filter(obj => obj.color !== 'red')
.filter(obj => obj.shape !== 'circle')
.map(obj => {
  //logic
}
但是,我需要运行完全相同的过滤器,而不合并两个阵列。因此,用
[…arr1,…arr2]
过滤新变量是不可能的

我一直在尝试做以下几点:

arr1.concat(arr2).filter.... 
但是我不相信
concat
可以用过滤器处理


是否有其他数组方法可以帮助我处理此问题,我似乎无法获得正确的结果

您最好的选择是创建一个单独的函数来完成此操作,如下所示

const arr1=[{color:“blue”,shape:“triangle”},{color:“red”,shape:“square”},{color:“green”,shape:“circle”}];
const arr2=[{颜色:“紫色”,形状:“钻石”},{颜色:“黄色”,形状:“正方形”},{颜色:“橙色”,形状:“圆形”}];
常量applyFiltersAndMap=(数组)=>{
返回array.filter(obj=>obj.color!=='red')
.filter(obj=>obj.shape!=='circle')
.map(obj=>`${obj.color}${obj.shape}`);
};
log(applyFiltersAndMap(arr1));

log(applyFiltersAndMap(arr2))您的最佳选择可能是创建一个单独的函数来完成此操作,如下所示

const arr1=[{color:“blue”,shape:“triangle”},{color:“red”,shape:“square”},{color:“green”,shape:“circle”}];
const arr2=[{颜色:“紫色”,形状:“钻石”},{颜色:“黄色”,形状:“正方形”},{颜色:“橙色”,形状:“圆形”}];
常量applyFiltersAndMap=(数组)=>{
返回array.filter(obj=>obj.color!=='red')
.filter(obj=>obj.shape!=='circle')
.map(obj=>`${obj.color}${obj.shape}`);
};
log(applyFiltersAndMap(arr1));

log(applyFiltersAndMap(arr2))>但我不相信concat可以用过滤器处理。为什么不呢?为什么不把代码片段变成一个函数
filterAndMap(array)
,并在两者上调用它呢?类似于
var arr1Filtered=filterAndMap(arr1);var arr2Filtered=filterAndMap(arr2)
我不确定
concat
部分是否真的很重要,因为它合并了两个或多个数组,并且您特别指出您不想这样做。诚然,
concat
不允许您对
进行过滤这一事实可能指向一个错误的类型。@Scrimothy OP说他特别想让它们分开。如果要组合方法,我认为一个
.reduce()
可以以较少的迭代次数完成
.filter()
.map()
的工作。注意:如果不将过滤器的结果分配回
arr1
,那么
arr1
将不会被过滤。您的目的是通过过滤器实际消除
arr1
arr2
中的元素,还是只想处理/变异它们包含的某些对象?>但我认为concat无法使用过滤器进行处理。为什么不呢?为什么不把代码片段变成一个函数
filterAndMap(array)
,并在两者上调用它呢?类似于
var arr1Filtered=filterAndMap(arr1);var arr2Filtered=filterAndMap(arr2)
我不确定
concat
部分是否真的很重要,因为它合并了两个或多个数组,并且您特别指出您不想这样做。诚然,
concat
不允许您对
进行过滤这一事实可能指向一个错误的类型。@Scrimothy OP说他特别想让它们分开。如果要组合方法,我认为一个
.reduce()
可以以较少的迭代次数完成
.filter()
.map()
的工作。注意:如果不将过滤器的结果分配回
arr1
,那么
arr1
将不会被过滤。您的目的是通过过滤器实际消除
arr1
arr2
中的元素,还是只想处理/变异它们包含的某些对象?感谢您的超级彻底的响应,这就是我最终选择的路线,因为我误用了
concat
。再次感谢@TylerRoper感谢您接听我在建议中错过的
mapper()
电话。回答得好。感谢您的超级全面的回复,这是我最终选择的路线,因为我误用了
concat
。再次感谢@TylerRoper感谢您接听我在建议中错过的
mapper()
电话。回答得好。