Javascript 映射和过滤链接

Javascript 映射和过滤链接,javascript,functional-programming,Javascript,Functional Programming,数据如下所示 [{time: '09:00', 'level':'x3', 'type':'ae'} time: '10:00', 'level':'x6', 'type':'fe'} time: '09:00', 'level':'y3', 'type':'hy'} time: '11:00', 'level':'z3', 'type':'hy'}] 我希望得到的结果是: 按时间-09:00筛选,并为相同类型创建拆分数组 示例结果: {"levels": [ "x3","y3"],"type

数据如下所示

[{time: '09:00', 'level':'x3', 'type':'ae'}
time: '10:00', 'level':'x6', 'type':'fe'}
time: '09:00', 'level':'y3', 'type':'hy'}
time: '11:00', 'level':'z3', 'type':'hy'}]
我希望得到的结果是: 按时间-09:00筛选,并为相同类型创建拆分数组

示例结果:

{"levels": [ "x3","y3"],"types": ["ae","hy"]}
我可以用三个函数(过滤器和映射)来实现这一点,但我想把它们链接起来。是否可以用更优雅的方式


提前感谢。

注意:结果将是一个包含两个数组的对象。要获取该对象,可以使用
reduce
如下所示:

var-arr=[
{时间:'09:00','level':'x3','type':'ae'},
{时间:'10:00','level':'x6','type':'fe'},
{时间:'09:00','level':'y3','type':'hy'},
{时间:'11:00','level':'z3','type':'hy'}
];
var result=arr.filter(o=>o.time=='09:00')
.减少((acc,o)=>{
acc.levels.推送(o.level);
附件类型推送(o型);
返回acc;
},{级别:[],类型:[]});

控制台日志(结果)只需过滤和映射所需的属性,并获得一个包含所需属性和数组中所有值的对象

var数组=[{time:'09:00',level':'x3','type':'ae'},{time:'10:00','level':'x6','type':'fe'},{time:'09:00','level':'y3','type':'hy'},{time:'11:00','level'z3','type':'hy,
结果=数组。
过滤器(a=>a.time=='09:00')。
映射(({level,type})=>({level,type}))。
reduce((r,o,i)=>(Object.keys(o).forEach(k=>(r[k]=r[k]| |[]).push(o[k])),r),{};
控制台日志(结果)
var tmp=[{time:'09:00','level':'x3','type':'ae'},
{时间:'10:00','level':'x6','type':'fe'},
{时间:'09:00','level':'y3','type':'hy'},
{时间:'11:00','level':'z3','type':'hy'}];
var result={};result.levels=[];result.types=[];
tmp.filter(data=>data.time==='09:00').map(data=>{
结果.levels.push(数据.level);
结果.types.push(数据.type);
});

控制台日志(结果)您现在做得如何?@A.Lau,再次筛选、映射和映射。无法获得预期结果,因为它有两个同名属性。您所需的输出无效@NinaScholz这不是唯一的问题,OP还试图将对象术语放入一个数组容器中,我已经超过了你,但这似乎不是正确的解决方案;d@Kinduser,实际上,OP要求的结果是无效的。事实上,他想要的解决方案是明确的,但无论如何,我再次从你那里学到了新的东西。@Nina,可能是你被否决了。我应该在这里再次解释,JSON是一种比喻。