簡體   English   中英

如果有匹配的元素,如何比較 2 個單獨的對象/數組是否有一個相同的元素並將 2 個對象連接到一個數組中? Javascript

[英]How to compare if, 2 separate Objects/Array have one same element and concat 2 objects into one array, if there is matching element? Javascript

我有一個 promise.all 返回 2 個對象。 這兩個獨立對象中的共同元素是room 我希望兩個對象都在 1 個數組中,如果房間匹配,我想連接這些對象。

const urls = ['/room/*/userconfig', '/room/*/observation/latest'];
let requests = urls.map(url => axios.get(url)); 

Promise.all(requests)
  .then(res => {
        let patientObjArray = Object.values(res[0].data);
        let patientObservationsArray = Object.values(res[1].data);
  })


const patientObjArray = [
  {
    room: "room18",
    patient: "91911671-302b-47b5-a24d-d2a1fea548d6",
    hospitalNumber: "12"
  },
  {
    room: "room19",
    patient: "b793bbba-b2bb-4995-9247-bb4d4f2be65a",
    hospitalNumber: "13"
  },
  {
    room: "room20",
    patient: "a8e8efa1-ea00-4d32-b4b2-58727200b9b0",
    hospitalNumber: "14"
  },
  {
    room: "room21",
    patient: "asdadddaddada-b4badasd2-7272a00qb9b0",
    hospitalNumber: "15"
  }
];

// patientObservationsArray is data related to patientObjArray.room

const patientObservationsArray = [
  {
    observation: {
      room: "room18",
      timestamp: "10:00",
      patient: "91911671-302b-47b5-a24d-d2a1fea548d6"
    },
    comment: { value: "Ok" }
  },
  {
    observation: {
      room: "room19",
      timestamp: "11:00",
      patient: "b793bbba-b2bb-4995-9247-bb4d4f2be65a"
    },
    comment: { value: "Good" }
  },
  {
    observation: {
      room: "room20",
      timestamp: "12:00",
      patient: "a8e8efa1-ea00-4d32-b4b2-58727200b9b0"
    },
    comment: { value: "bad" }
  }
];

預期產出

const combinedArray = [
  {
    room: "room18",
    patient: "91911671-302b-47b5-a24d-d2a1fea548d6",
    hospitalNumber: "12",
    timestamp: "10:00",
    comment: "Ok"
  },
  {
    room: "room19",
    patient: "b793bbba-b2bb-4995-9247-bb4d4f2be65a",
    hospitalNumber: "13",
    timestamp: "11:00",
    comment: "Good"
  },
  {
    room: "room20",
    patient: "a8e8efa1-ea00-4d32-b4b2-58727200b9b0",
    hospitalNumber: "14",
    timestamp: "12:00",
    comment: "Bad"
  },
  {
    room: "room21",
    patient: "asdadddaddada-b4badasd2-7272a00qb9b0",
    hospitalNumber: "15"
  }
];

這是我的解決方案。 請試試這個代碼。

 const mergedArray = patientObjArray.map(obj => { const matched = patientObservationsArray.find(obs => obs.observation.room === obj.room); if (!!matched) { return { ...obj, ...matched.observation, comment: matched.comment.value }; } else { return obj; } }); console.log(mergedArray);

您可以先展平您的patientObservationsArray ,然后將其與您的patientObjArray合並,最后使用reduce方法合並您的數組。

可能有更好的方法可以做到這一點,請隨時給我建議。 這應該可以解決您的問題。

 const patientObjArray = [ { room: "room18", patient: "91911671-302b-47b5-a24d-d2a1fea548d6", hospitalNumber: "12" }, { room: "room19", patient: "b793bbba-b2bb-4995-9247-bb4d4f2be65a", hospitalNumber: "13" }, { room: "room20", patient: "a8e8efa1-ea00-4d32-b4b2-58727200b9b0", hospitalNumber: "14" }, { room: "room21", patient: "asdadddaddada-b4badasd2-7272a00qb9b0", hospitalNumber: "15" } ]; const patientObservationsArray = [ { observation: { room: "room18", timestamp: "10:00", patient: "91911671-302b-47b5-a24d-d2a1fea548d6" }, comment: { value: "Ok" } }, { observation: { room: "room19", timestamp: "11:00", patient: "b793bbba-b2bb-4995-9247-bb4d4f2be65a" }, comment: { value: "Good" } }, { observation: { room: "room20", timestamp: "12:00", patient: "a8e8efa1-ea00-4d32-b4b2-58727200b9b0" }, comment: { value: "bad" } } ]; const combinedArray = patientObservationsArray // flatten your patientObservationsArray .map(item => ({ ...item.observation, ...item.comment })) // concat to your patientObjArray .concat(patientObjArray) // use reduce method to merge your array .reduce((res, item) => { const { room } = item; const index = res.findIndex(i => i.room === room); if (index > -1) { // merge object if already exists res[index] = { ...res[index], ...item }; } else { // else push into your array res.push(item); } return res; }, []); console.log(combinedArray);


這是我建議的 playcode plunkr: https ://playcode.io/473861?tabs = script.js,preview,console

我們簡單地遍歷第一個數組,通過匹配函數運行每個對象,然后將對象添加到新數組中。 如果找到匹配項,則會添加必填字段。

我建議保持對象結構相似,以便更輕松地在新數據中使用對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM