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)
在稀疏映射()上结果几乎同样方便。