Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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 使用筛选器返回特定值_Javascript - Fatal编程技术网

Javascript 使用筛选器返回特定值

Javascript 使用筛选器返回特定值,javascript,Javascript,假设您有一个对象数组: var arr = [{ a: 1 }, { a: 2 }, { a: 3 }]; 您只需要每个对象的a属性的值: [1,2,3] 您可以使用什么功能性方法?我尝试使用过滤器: arr.filter(x => x.a); 当然,过滤器返回整个对象。有没有其他方法可以达到上述效果?我的意思是,我可以使用forEach,或者for循环,但是有更好的方法吗映射将起作用,但实际上我想要过滤掉其中的一些值。您想要映射来转换每个元素的类型。没有魔法过滤器也可以制作地图;如果

假设您有一个对象数组:

var arr = [{ a: 1 }, { a: 2 }, { a: 3 }];
您只需要每个对象的
a
属性的值:

[1,2,3]

您可以使用什么功能性方法?我尝试使用过滤器:

arr.filter(x => x.a);

当然,过滤器返回整个对象。有没有其他方法可以达到上述效果?我的意思是,我可以使用forEach,或者for循环,但是有更好的方法吗<如果我想要所有的属性值,代码>映射将起作用,但实际上我想要过滤掉其中的一些值。

您想要
映射
来转换每个元素的类型。没有魔法过滤器也可以制作地图;如果既要
过滤
又要
映射
,则需要
过滤
,然后
映射
。这些东西都是专门用来连锁的:

var arr = [{ a: 1 }, { a: 2 }, { a: 3 }];

arr.filter(x => x.a > 1).map(x => x.a) // => [2, 3]

Javascript是以不同方式获得相同结果的最佳选择

但更好的方法是使用常规for循环(检查)

所以你可以这样做:
var-arr=[{a:1},{a:2},{a:3}];
var newArray=[];

for(var i in arr){//或者您可以使用:for(var i=0;我是新手,如果我的期望是错误的,很抱歉。更正确的方法是先筛选后映射还是先映射再筛选?:-p这取决于您的具体需要。通常更简单的方法是先映射()再筛选(),这样您就不需要在筛选函数中使用自定义属性名称。例如:
arr.map过滤器(gt,1)
同样,这取决于您的具体需求。在这种情况下,这无关紧要,因为我们正在处理的是最简化的示例。在现实世界中,map/filter和filter/map完全不同,通常只能以一种方式工作。例如,如果我要求您返回所有男生的年龄,您可以执行
students.filter(s=>s.sex=='male').map(s=>s.age)
,但是你不能做
students.map(s=>s.age).filter(age=>…?)
,因为
filter
的输入将是一个整数。
sex
属性已经被剥离了。@meagar:我所说的是
.filter(Boolean)
.filter(String)
可以清理单个map()回调函数,该函数在转换时会进行真实过滤,无需自定义过滤器回调函数。我经常使用这种模式,尽管箭头函数最终无法满足需要;)OP询问是否可以一次过滤+map,答案是否,但是
.filter(Boolean)
在稀疏映射()上结果几乎同样方便。