简体   繁体   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

I have a promise.all that returns 2 objects.我有一个 promise.all 返回 2 个对象。 The common element in these 2 seperate objects is room .这两个独立对象中的共同元素是room I want both object to be in 1 array, and if the room matches, I would like to concat the objects.我希望两个对象都在 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" }
  }
];

expected output预期产出

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"
  }
];

Here is my solution.这是我的解决方案。 Please try this code.请试试这个代码。

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

You can first flatten your patientObservationsArray , then merge it with your patientObjArray and finally use reduce method to merge your array.您可以先展平您的patientObservationsArray ,然后将其与您的patientObjArray合并,最后使用reduce方法合并您的数组。

There are probably better ways of doing this, feel free to give me suggestions.可能有更好的方法可以做到这一点,请随时给我建议。 This should solve your problem.这应该可以解决您的问题。

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


Here is a playcode plunkr for my suggestion: https://playcode.io/473861?tabs=script.js,preview,console这是我建议的 playcode plunkr: https ://playcode.io/473861?tabs = script.js,preview,console

We simply loop through the first array, run every object through a matching function against the second array and add the objects into a new array.我们简单地遍历第一个数组,通过匹配函数运行每个对象,然后将对象添加到新数组中。 If a match is found the required fields are added.如果找到匹配项,则会添加必填字段。

I would suggest keeping the object structure similar just to make using the objects in new data easier.我建议保持对象结构相似,以便更轻松地在新数据中使用对象。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 比较一组对象中的对象 - Compare objects in one array of objects 如何.concat具有至少一个相同元素的多个数组? - How to .concat multiple array that has at least one same element? 遍历数组以查找具有匹配ID的所有对象,然后将这些对象合并为数组中的一个元素。 - Loop through array to find all objects with matching ids, and merge those objects into one element in the array. 将数组映射到对象数组,其中对于数组的一个元素,我们可能有多个对象 - Map array into array of objects where for one element of array we may have multiple objects 对象数组比较 2 个元素值 - Array of objects compare 2 element values jQuery比较两个数组对象以拥有一个最终的数组对象 - jQuery compare two arrays objects to have one final array objects 增加JSON对象数组的一个元素的值 - Increment value of one element of an JSON array of objects 从每个javascript数组concat获取1个元素然后循环到一个数组 - Get 1 element from each javascript array concat then loop into one array 检查一个元素是否存在于对象数组中 - Check if one element exists in an array of objects 如何在javascript中比较同一数组中的不同对象 - How to compare different objects in the same array in javascript
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM