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

标签 javascript multidimensional-array

假设我有一个医疗对象列表,我想在其中选择具有“MEDICATION”类别并且还具有“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" )

但是我如何选择所有具有药物的对象,以及具有名称 === NEGATION 的对象的特征?

嵌套数组让我失望。

谢谢!

最佳答案

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

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);

关于javascript - 在多级对象数组上使用过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53824335/

相关文章:

javascript - 如何将事件类添加到基于每个页面中的 URL 的导航菜单

multidimensional-array - 有没有更好的方法来迭代多维数组?

javascript - 在 JS 中,anArray = [] 有效,但 abArray.splice(0, anArray.length) 和 anArray.length=0 在以下代码中产生不正确的结果 :

perl - 查找多维数组大小

javascript - 函数有条件返回

javascript - 通过 setInterval 添加输入不起作用

javascript - 如何根据对象的属性加载动态组件?

java - 如何在 Java 中创建我的数组的数组? (没有数组列表)

php - 如果日期相等,Array_multisort 将失败

javascript - 如何在 webkit2gtk 中将 native 代码公开给 javascript