для цикла, создающего дополнительные массивы взамен

#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