Как получить непревзойденные элементы из массива?

Итак, у меня есть запрос, который имеет rxInfos и specialMembers, которые я получаю из кеша, поэтому, если rxInfos.indexID сопоставлен, выполните некоторую обработку, если есть rxInfos indexID, но по какой-то причине не то же самое, что и indexID кеша, я хочу подтолкнуть этот indexID к массиву mismatchedIndexIDs. Как и второй элемент, это rxInfos.indexID не соответствует ни одному из specialMembers, поэтому он должен быть перенесен в mismatchedIndexID.

с приведенным ниже кодом, он подталкивает все идентификаторы specialMembers к несогласованному массиву.

main.ts

 for (const member of specialMembers) {
        for (const rxInfo of this.rxInfos) {
            if (member.indexID === rxInfo.indexID) {
                this.indexIDs.push(rxInfo.indexID);
                proxyMember = member;
                if (!member.dateOfBirth) {
                    statusDesc = "member dateOfbirth not found";
                    return Promise.reject(this.errorHandler(request, statusDesc));
                }
                const requestBody: any = this.buildSingleRequestBody(proxyMember, rxInfo);
                const requestObject = this.specialtyQuestionRequest(requestBody);
                this.requestArray.push(requestObject);
            } else {
                this.mismatchIndexIDS.push(rxInfo.indexID);
                this.indexIdMismatchCounter++;
            }
        }
    }

данные

"rxInfos": [
      {
            "drugNdc": "10101",
            "rxNumber": "14556459709",
            "firstFillIndicator": "N",
            "sourceSystem": "TBS",
            "indexID": "RPT0ifQ"
        },
      {
            "drugNdc": "101",
            "rxNumber": "145945000709",
            "firstFillIndicator": "N",
            "sourceSystem": "TBS",
            "indexID": "GJhQ1MrQnZkTFRR"
        }
    ]

    "specialyMembers":[
      {
        "dob":"12-12-1970"
        "firstName": "jimmy",
        "lasteName": "shew",
         "indexID": "RPT0ifQ"
      },
      {
         "dob":"18-10-1970"
        "firstName": "Timmy",
        "lasteName": "Doug",
         "indexID": "GJhQ1MrQ"
      },
        {
         "dob":"17-06-1981"
        "firstName": "John",
        "lasteName": "owascar",
         "indexID": "GJhQ1MrTGDSRQ"
      }
      ]
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
132
2

Ответы 2

Есть лучший способ сделать это с помощью find, который напрямую получит член от specialMembers с определенным indexID. Более того, вам просто нужно иметь дело с одним циклом for (другой неявно присутствует в find):

specialMembers.find(member => member.indexID === rxInfo.indexID)

Упрощенная версия вашего цикла for выглядит следующим образом:

var rxInfos = [{
    "drugNdc": "10101",
    "rxNumber": "14556459709",
    "firstFillIndicator": "N",
    "sourceSystem": "TBS",
    "indexID": "RPT0ifQ"
  },
  {
    "drugNdc": "101",
    "rxNumber": "145945000709",
    "firstFillIndicator": "N",
    "sourceSystem": "TBS",
    "indexID": "GJhQ1MrQnZkTFRR"
  }
];

var specialMembers = [{
    "dob": "12-12-1970",
    "firstName": "jimmy",
    "lasteName": "shew",
    "indexID": "RPT0ifQ"
  },
  {
    "dob": "18-10-1970",
    "firstName": "Timmy",
    "lasteName": "Doug",
    "indexID": "GJhQ1MrQ"
  },
  {
    "dob": "17-06-1981",
    "firstName": "John",
    "lasteName": "owascar",
    "indexID": "GJhQ1MrTGDSRQ"
  }
];

var indexIDs = [],
  mismatchIndexIDS = [],
  indexIdMismatchCounter = 0;


for (const rxInfo of rxInfos) {
  const member = specialMembers.find(member => member.indexID === rxInfo.indexID);
  if (member) {
    indexIDs.push(rxInfo.indexID);
    console.info('process', member);
  } else {
    mismatchIndexIDS.push(rxInfo.indexID);
    indexIdMismatchCounter++;
  }
}

console.info('index ids', indexIDs);
console.info('mismatches', mismatchIndexIDS);
console.info('counter', indexIdMismatchCounter);

Я также хотел получить элемент-член, чтобы я мог дальше обрабатывать логику, как в моем коде, я должен назначить член для proxyMember, в этом случае мне нужно использовать фильтр, я думаю

hussain 28.11.2018 16:36

@hussain Я изменил свой ответ на использование find. Таким образом, вы получите участника с заданным идентификатором.

slider 28.11.2018 17:19
const memberMatched = member => {
  return rxInfos.find(rxInfo => rxInfo.indexID === member.indexID)
}

const mismatchIndexIDS = specialMembers.reduce((res, member) => {
  return memberMatched(member) ? res : res.concat(member.indexID)
}, [])

const indexIdMismatchCounter = mismatchIndexIDS.length

const matchedMembers = specialMembers.reduce((res, member) => {
  const rxRecord = memberMatched(member)
  return rxRecord ? res.concat({rxRecord, member}) : res
}, [])

// DO YOUR STUFF WITH MATCHED MEMBERS

Другие вопросы по теме