使用 filter 过滤嵌套对象并使用 JavaScript 映射

Filter an nested Object with filter and map with JavaScript

我知道这几乎是重复的,但我无法使代码正常工作。我有一个需要过滤的对象,我目前正在尝试模拟已接受的答案代码

我的数据对象是:

[{
    "project_num": "5R01DA012513-23",
    "principal_investigators": [{
      "profile_id": 2076451,
      "full_name": "PK",
      "title": ""
    }]
  },
  {
    "project_num": "5R01DK118529-03",
    "principal_investigators": [{
      "profile_id": 8590844,
      "full_name": "HW",
      "title": "PROFESSOR, SCIENTIFIC DIRECTOR"
    }]
  },
  {
    "project_num": "3R01AA025365-05S1",
    "principal_investigators": [{
      "profile_id": 8730036,
      "full_name": "JJ",
      "title": "ASSOCIATE PROFESSOR OF PSYCHIATRY"
    }]
  },
  {
    "project_num": "1R01HL163963-01",
    "principal_investigators": [{
        "profile_id": 2084037,

        "full_name": "KH",
        "title": "ASSOCIATE PROFESSOR"
      },
      {
        "profile_id": 11309656,
        "full_name": "AM",
        "title": "RESEARCH ASSISTANT PROFESSOR"
      }
    ]
  },
  {
    "project_num": "5R25HL092611-15",
    "principal_investigators": [{
      "profile_id": 1886512,
      "full_name": "CW",
      "title": "P"
    }]
  }
]

我的 JavaScript 代码是:

let payLoad = 1886512
const result = this.reporterData.map(t => {
  const principal_investigators = t.principal_investigators.filter(d =>
    d.profile_id === payLoad);
  return { ...t,
    principal_investigators
  };
})

我需要传入一个 profile_id 作为有效载荷和 return 将填充数据的对象 table。

数据可以是 1000 项,principla_investigators 可以是多项。当我使用我拥有的代码时 return 所有对象。有人可以指出我的错误吗?谢谢

您可以尝试这样做:

const result = this.reporterData.filter((t) => {
  const principal_investigators = t.principal_investigators.filter((d) => d.profile_id === payLoad)
  return (principal_investigators.length > 0)
})

我知道你想要一个包含所有匹配该 ID 的调查员的数组,对吗?

试试这个:

const result = this.reporterData.reduce((previous, current) => {
    if (current.principal_investigators) {
        current.principal_investigators.forEach(pi => {
            if (pi.profile_id === payLoad) {
                previous.push(current)
            }
        });
    }
    return previous
}, [])

您也可以使用 for 循环得到相同的结果:

const result = [];
for (project of this.reporterData) {
    if (project.principal_investigators) {
        for (pi of project.principal_investigators) {
            if (pi.profile_id == payLoad) {
                result.push(pi);
            }
        }
    }
}