#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. Спасибо вам за вашу помощь