#javascript #arrays #for-loop #object
Вопрос:
Я пытаюсь поместить данные в массив и вернуть оба массива в объект. Форма этих данных действительно доставляет мне много хлопот… то, что я пытаюсь вернуть, — это что-то вроде этого:
{ associates: [{...},{...}], telehealth: [{...},{...}] }
Но вместо этого я получаю вложенные массивы, возвращаемые с дополнительным пустым массивом для каждого типа. Вот рабочий пример, любой совет по этому поводу был бы очень признателен, так как форма этих данных действительно доставляет мне много хлопот… :
const activeTab = "Physicians" const NEWRATES = { standard: [ { "ORG A": { Physicians: { telehealth: { orgName: "ORG A", weekdayEncounters: 15, weeknightEncounters: 16.25, weekendDayEncounters: 16.25, weekendNightEncounters: 97.25, holidayEncounters: 17.25, stipend: 0, }, }, NonPhysicians: { telehealth: { orgName: "ORG A", weekdayEncounters: 15, weeknightEncounters: 16.25, weekendDayEncounters: 16.25, weekendNightEncounters: 17.25, holidayEncounters: 17.25, stipend: 0, }, }, date: "07-2021", orgName: "org A", ltc: false, }, }, { "ORG B": { Physicians: { telehealth: { orgName: "ORG B", weekdayEncounters: 15, weeknightEncounters: 16.25, weekendDayEncounters: 22.25, weekendNightEncounters: 17.25, holidayEncounters: 17.25, stipend: 0, }, }, NonPhysicians: { telehealth: { orgName: "ORG B", weekdayEncounters: 15, weeknightEncounters: 66.25, weekendDayEncounters: 16.25, weekendNightEncounters: 17.25, holidayEncounters: 17.25, stipend: 0, }, }, date: "07-2021", orgName: "orgB", ltc: false, }, }, ], ltc: [ { Infinity: { Physicians: { associates: { orgName: "Infinity", roundingHours: 10, onCallHours: 10, weekdayEncounters: 16, weeknightEncounters: 27.25, weekendDayEncounters: 18.25, weekendNightEncounters: 19.25, holidayEncounters: 20.25, stipend: 0, }, }, NonPhysicians: { associates: { orgName: "Infinity", roundingHours: 0, onCallHours: 0, weekdayEncounters: 15, weeknightEncounters: 16.25, weekendDayEncounters: 16.25, weekendNightEncounters: 17.25, holidayEncounters: 17.25, stipend: 0, }, }, date: "07-2021", orgName: "infinity", ltc: true, }, }, ], }; const sortData = Object.values(NEWRATES); const NEWfiltered = !!NEWRATES amp;amp; sortData; const byProviderType = !!NEWfiltered amp;amp; NEWfiltered.map((item, idx) =gt; { const associatesList = []; const telehealthList = []; for (let i = 0; i lt; item.length; i ) { let orgKeys = Object.keys(item[i]).toString(); let org = item[i][orgKeys]; // if the object org.Physicians and the type is telehealth push into the array if (!org.ltc amp;amp; org[activeTab]) { telehealthList.push(org[activeTab].telehealth); } else if (!!org.ltc amp;amp; org[activeTab]) { associatesList.push(org[activeTab].associates); } } return {telehealth: telehealthList, associates: associatesList}; }); console.log(byProviderType, "NEWRATES:");
Комментарии:
1. Пожалуйста, покажите нам свой код для этого, вместо рабочего примера
Ответ №1:
Map
возвращаемый массив, состоящий из элементов, возвращаемых на каждой итерации. Вот почему у вас есть массив массивов.
Просто переместите оба списка в область выше и используйте forEach
.
const sortData = Object.values(NEWRATES); const NEWfiltered = !!NEWRATES amp;amp; sortData; const associatesList = []; const telehealthList = []; !!NEWfiltered amp;amp; NEWfiltered.forEach((item, idx) =gt; { for (let i = 0; i lt; item.length; i ) { let orgKeys = Object.keys(item[i]).toString(); let org = item[i][orgKeys]; // if the object org.Physicians and the type is telehealth push into the array if (!org.ltc amp;amp; org[activeTab]) { telehealthList.push(org[activeTab].telehealth); } else if (!!org.ltc amp;amp; org[activeTab]) { associatesList.push(org[activeTab].associates); } } }); console.log({ associatesList, telehealthList }, "NEWRATES:"); ```javascript