在javascript中使用lambda比较列表中的两个对象
我想我可以用20行代码自己完成这项工作。但我认为它可以是一行 假设我们有一个1轮、2轮或3轮汽车的列表 汽车[]=[C1、C2、C3、C4、C5、C6] C1-C3只有一个轮子,C4有两个,C5-C6有三个在javascript中使用lambda比较列表中的两个对象,javascript,list,arraylist,Javascript,List,Arraylist,我想我可以用20行代码自己完成这项工作。但我认为它可以是一行 假设我们有一个1轮、2轮或3轮汽车的列表 汽车[]=[C1、C2、C3、C4、C5、C6] C1-C3只有一个轮子,C4有两个,C5-C6有三个 class Car{ constructor(wheels){ this.wheels = wheels; } } 我想要这个结果: 过滤器硬盘[]=[[C1、C2、C3]、[C4]、[C5、C6]] 或 过滤器数据卡[]=[[C1,C2,C3],[C5,C6] =
class Car{
constructor(wheels){
this.wheels = wheels;
}
}
我想要这个结果:
过滤器硬盘[]=[[C1、C2、C3]、[C4]、[C5、C6]]
或
过滤器数据卡[]=[[C1,C2,C3],[C5,C6]
=>我需要“轮子”中哪些对象具有相同值的信息
轮子在我的项目中是字符串,可能有48个不同的值,因此我需要比较carX===carY
我的“尝试”就像(“伪代码”):
首先按车轮数对汽车进行分组,然后抓住每组的汽车 你可以这样一行就完成
let id=0;
班车{
建造师(车轮){
this.id=++id;
这个。轮子=轮子;
}
}
常数数据=[
新车(“1”),
新车(“1”),
新车(“1”),
新车(“2”),
新车(“3”),
新车(“3”),
];
const res=[…data.reduce((acc,el)=>acc.set(el.wheels,[…(acc.get(el.wheels)| |[]),el]),new Map()).values();
console.log(res);
根据我对您的问题的理解。您只需
const Cars = [C1,C2,C3,C4,C5,C6]
const FilteredCars =[Cars.filter(car=>car.wheels===1),Cars.filter(car=>car.wheels===2),Cars.filter(car=>car.wheels===3)]
你会得到[[C1,C2,C3],[C4],[C5,C6]]这种结果我怎么知道C1-C3只有一个轮子,C4两个,C5-C6三个,CX是一个物体吗?@hgb123是的,sry忘了给班级上课了。我编辑了这个问题。谢谢vm!我会尝试将它改编成我的项目。你能解释一下这一行发生了什么吗?我想理解:)“el”是车u迭代。但是什么是“acc”?逻辑在哪里,你按车轮数分组?@psclp
acc
是累积值,这里用一个映射初始化,每个循环,映射将被适当的值填充,你可以用reduce:arr.reduce((acc,el)作为简单的求和计算示例=>acc+el,0)
这是否意味着它仅在wheels为int-right时才起作用?在我的项目中,“wheels”是字符串。因此我需要比较carX===carY来筛选。nvm它也与字符串一起工作。谢谢!在我的项目Cars.wheels中有3个以上不同的值。如果我按不同的值进行筛选,这将是一个很长的一行线:D。
const Cars = [C1,C2,C3,C4,C5,C6]
const FilteredCars =[Cars.filter(car=>car.wheels===1),Cars.filter(car=>car.wheels===2),Cars.filter(car=>car.wheels===3)]