Итак, у меня есть запрос, который имеет 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"
}
]



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Есть лучший способ сделать это с помощью 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);@hussain Я изменил свой ответ на использование find. Таким образом, вы получите участника с заданным идентификатором.
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
Я также хотел получить элемент-член, чтобы я мог дальше обрабатывать логику, как в моем коде, я должен назначить член для proxyMember, в этом случае мне нужно использовать фильтр, я думаю