Я хотел бы сгруппировать объект по частичному имени и добавить их в переменные

data =
{
   SCHOOL-ADMISSION_YEAR: "2021"
   SCHOOL-SCHOOL_NAME: "ABC SCHOOL"
   SCHOOL-SCHOOL_LOCATION: "NEWYORK"
   ENROLLMENT-ADMISSION_YEAR: "2021"
   ENROLLMENT-SUBMISSION_DATE: "2020-04-02"
   ENROLLMENT-ENROLLMENT_DATE: "2020-06-02"
}

Группа должна быть

 School =
  {
   ADMISSION_YEAR: "2021",
   SCHOOL_NAME: "ABC SCHOOL",
   SCHOOL_LOCATION: "NEWYORK",
  }

 Enrollment =
  {
   ADMISSION_YEAR: "2021",
   SUBMISSION_DATE: "2020-04-02",
   ENROLLMENT_DATE: "2020-06-02",
  }

var school = data.filter(p => p.contains('SCHOOL'));
var enrollment = data.filter(p => p.contains('ENROLLMENT'));
1
user2410266 15 Окт 2021 в 18:35

2 ответа

Лучший ответ

Обычные объекты не имеют метода filter и должны повторяться с помощью цикла. Для фильтрации и сопоставления их можно преобразовать в массив записей и обратно, например, с помощью ES2019 fromEntries:

const school = Object.fromEntries(
  Object.entries(data)
  .filter(([key]) => key.includes('SCHOOL-'))
  .map(([key, val]) => [key.replace('SCHOOL-', ''), val])
);
1
Estus Flask 15 Окт 2021 в 15:49

Я думаю, это сработает для вас:

function getAllWithSubstring(substring) {
  let dataWithSubstring = [];

  for (let key of Object.keys(data)) {
    if (key.includes(substring)) {
      dataWithSubstring.push(data[key])
    }
  }
  return dataWithSubstring;
}

Тогда вы можете назвать это так:

getAllWithSubstring("SCHOOL"); // => ['2021', 'ABC SCHOOL', 'NEWYORK']
getAllWithSubstring("ENROLLMENT"); // => ['2021', '2020-04-02', '2020-06-02']
0
Lars 15 Окт 2021 в 15:48