Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
List 从javascript列表中的多个条件中获取匹配的值_List_Ecmascript 6_Filter_Nested Loops_Nested Lists - Fatal编程技术网

List 从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,

我试图从Javascript中的列表中获取一个列表

名单如下:

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(结果)