Java Script/Vue.Js группировка по объекту на основе имени

#javascript #vue.js

Вопрос:

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

 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 =gt; p.contains('SCHOOL')); var enrollment = data.filter(p =gt; p.contains('ENROLLMENT'));  

Комментарии:

1. Ничто из показанного не относится конкретно к Vue. Это Джей Си.

2. Спасибо. Я обновлю название.

Ответ №1:

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

 const school = Object.fromEntries(  Object.entries(data)  .filter(([key]) =gt; key.includes('SCHOOL-'))  .map(([key, val]) =gt; [key.replace('SCHOOL-', ''), val]) );  

Для массива объектов это:

 const school = Object.entries(data)  .filter(([key]) =gt; key.includes('SCHOOL-'))  .map(([key, val]) =gt; ({ [key.replace('SCHOOL-', '')]: val }));  

Комментарии:

1. Спасибо вам за вашу помощь

2. У меня есть еще один вопрос, если вы не возражаете. Вместо создания одного объекта я могу создать массив объектов. Каждое значение ключа будет объектом внутри массива.

3. Как именно должен выглядеть результирующий массив?

4. [ {ГОД ПРИЕМА: «2021»}, {ИМЯ ШКОЛЫ: «ШКОЛА АЗБУКИ»}, {МЕСТОПОЛОЖЕНИЕ ШКОЛЫ: «НЬЮ-ЙОРК»} ]

5. Обновленный. Как правило, массив объектов с одним ключом не очень практичен, карта ES6 может быть более подходящей в качестве повторяющейся коллекции пар значений ключей. И в Vue объект также легко повторяется в v-for.

Ответ №2:

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

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

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

 getAllWithSubstring("SCHOOL"); // =gt; ['2021', 'ABC SCHOOL', 'NEWYORK'] getAllWithSubstring("ENROLLMENT"); // =gt; ['2021', '2020-04-02', '2020-06-02']  

Комментарии:

1. Спасибо вам за вашу помощь