List 从javascript列表中的多个条件中获取匹配的值
我试图从Javascript中的列表中获取一个列表 名单如下:List 从javascript列表中的多个条件中获取匹配的值,list,ecmascript-6,filter,nested-loops,nested-lists,List,Ecmascript 6,Filter,Nested Loops,Nested Lists,我试图从Javascript中的列表中获取一个列表 名单如下: const cars = [ { id: 1, brand: "Mercedes Benz", properties: [ { property: "Mechanical", value: 2, }, { property: "Chemical", value: 2,
const cars = [
{
id: 1,
brand: "Mercedes Benz",
properties: [
{
property: "Mechanical",
value: 2,
},
{
property: "Chemical",
value: 2,
},
{
property: "Pressure",
value: 3,
}],
},
{
id: 2,
brand: "BMW",
properties: [
{
property: "Mechanical",
value: 5,
},
{
property: "Chemical",
value: 3,
},
{
property: "Pressure",
value: 6,
}],
}
]
我需要匹配某些属性值大于X,Y的汽车
例如,我想要机械性能值大于3且压力大于4的汽车。在这种情况下,我将获得id为2的完整对象
有人有主意吗?这让我很难过
提示:我将其粘贴到节点REPL;)
这是我尝试过的,但我一无所获:
cars.filter(car => car.properties.some((p1, p2) => {return ((p1.property === "Mechanical" && p1.value > 3) && (p2.property === "Pressure" && p2.value > 4))}))
提前感谢您需要迭代所有项目,并检查每个项目的相关条件,如果所有项目都通过,则返回
true
。在您的案例中,您正在检查每个项目的所有条件,并且由于没有任何项目的属性可以同时具有“机械”和“压力”值,因此所有项目都会失败
当数组需要通过所有条件时,如果所有迭代项都返回true
,则应使用仅返回true
为了使其更通用,我们可以将条件作为函数存储在对象或映射中。如果此属性有一个条件函数
,我们将使用该函数检查值
。如果没有,我们可以立即返回true
注意:如果谓词不存在,此答案使用和返回true
。如果您的运行环境不支持此运算符,请将该行替换为谓词[property]?谓词[属性](值):true
(参见第二个示例)
const fn=(谓词,cars)=>
cars.filter(car=>car.properties.every({property,value})=>
谓词[属性]?(值)??真
))
const cars=[{“id”:1,“brand”:“Mercedes-Benz”,“properties”:[{“property”:“Mechanical”,“value”:2},{“property”:“Chemical”,“value”:2},{“property”:“Pressure”,“value”:3},{“property”:“BMW”,“properties”:“Mechanical”,“value”:5},{“property”:“Chemical”,“value”:3},{“property”:“Pressure”,“value”:6}]
常量谓词={
机械:值=>值>3,
压力:值=>值>4,
}
const result=fn(谓词,cars)
console.log(结果)