在多级对象数组上使用过滤器?

时间:2018-12-17 23:15:58

标签: javascript multidimensional-array

说我有一个医疗对象列表,我想在其中选择所有类别为“ MEDICATION”并且还具有“ Trait”的对象,“ Trait”是对象的数组,特别是术语“ NEGATION”。例如:

[ 
  { 
   Score: 0.9978850483894348,
   Text: 'prozac',
   Category: 'MEDICATION',
   Type: 'BRAND_NAME',
   Traits: [
    { 
      Name: "SIGN"
    },
    { 
      Name: "NEGATION"
    }
  ] 
},
{ 
  Text: "pulmonary embolism",
  Category: "MEDICAL_CONDITION",
  Type: "DX_NAME",
  Traits: [
   {
     Name: "DIAGNOSIS",
     Score: 0.9635574817657471
    } ]

通常对于过滤器,我可以很容易地选择所有药物的对象:

Object.filter( obj => obj.Category === "MEDICATION" )

但是我该如何选择所有带有药物治疗的对象,以及带有名称===否定对象的特征?

嵌套数组使我失望。

谢谢!

1 个答案:

答案 0 :(得分:3)

您仍然可以使用过滤器,但可以在子数组上使用一些过滤器

Object.filter(obj => obj.Traits.some(t => t.Name === 'NEGATION'));

const values = [
  {
    Score: 0.9978850483894348,
    Text: 'prozac',
    Category: 'MEDICATION',
    Type: 'BRAND_NAME',
    Traits: [
      {
        Name: 'SIGN'
      },
      {
        Name: 'NEGATION'
      }
    ]
  },
  {
    Text: 'pulmonary embolism',
    Category: 'MEDICAL_CONDITION',
    Type: 'DX_NAME',
    Traits: [
      {
        Name: 'DIAGNOSIS',
        Score: 0.9635574817657471
      }
    ]
  }
].filter(obj => obj.Category === 'MEDICATION' && obj.Traits.some(t => t.Name === 'NEGATION'));

console.log(values);