#javascript #json
Вопрос:
Я пытаюсь создать динамически генерируемую таблицу на javascript, и у меня есть JSON, из которого мне нужно отфильтровать определенную информацию
JSON, из которого нужно вытащить (курсант)
let courseList = [
{
"Line": 81,
"Department": "BUS",
"Number": 344,
"Section": 1,
"Title": "MANAGEMENT OF INFORMATION SYSTEMS",
"Faculty": "Smith, John",
"Openings": 2,
"Capacity": 30,
"Status": "Open",
"Day": "MWF",
"StartTime": "1:25:00 PM",
"EndTime": "2:20 PM",
"Campus": " Main Campus",
"Building": " Science and Engineering",
"Room": " SE 341 Computer Science Lab",
"Credits": 3,
"Start Date": "8/30/2021",
"End Date": "12/17/2021rn"
},
{
"Line": 167,
"Department": "CSC",
"Number": 133,
"Section": 2,
"Title": "SURVEY OF COMPUTER SCIENCE",
"Faculty": "Scott, John",
"Openings": 6,
"Capacity": 15,
"Status": "Open",
"Day": "H",
"StartTime": "2:00:00 PM",
"EndTime": "4:50 PM",
"Campus": " Main Campus",
"Building": " Science and Engineering",
"Room": " SE 341 Computer Science Lab",
"Credits": 0,
"Start Date": "8/30/2021",
"End Date": "12/17/2021rn"
}
]
И я хотел бы запустить какой-то метод, чтобы сгенерировать другой JSON из существующего. Чтобы выглядеть примерно так
Ожидаемый результат
let filteredCourses = [
{
"Title": "MANAGEMENT OF INFORMATION SYSTEMS",
"Faculty": "Smith, John",
"Openings": 2,
},
{
"Title": "SURVEY OF COMPUTER SCIENCE",
"Faculty": "Scott, John",
"Openings": 6,
}
]
Я все еще новичок в javascript, но я знаю, что есть метод фильтрации массивов, который я использовал, но это дало мне только ключи или значения из моего списка курсов. Я также пытался использовать метод толчка без особого успеха.
Существует ли какой-либо способ отфильтровать определенные пары ключей и значений, которые мне нужны непосредственно в JSON, или я могу отфильтровать как ключи, так и значения отдельно и объединить их? Я не уверен, каким был бы лучший метод.
Ответ №1:
Функция фильтра используется для фильтрации элементов из массива на основе определенной вами функции.
Например, если вы хотите отфильтровать все курсы, на которых нет вакансий, вы бы использовали
const filteredCourse = courseList.filter(a => a.Openings > 0);
Но то, что вы хотите сделать, — это выполнить операцию над каждым элементом. Для этого вы хотите использовать карту. Подобный этому:
const filteredList = courseList.map(a => ({ Title: a.Title, Faculty: a.Faculty, Openings: a.Openings }));
Вот фрагмент:
const courseList = [
{
"Line": 81,
"Department": "BUS",
"Number": 344,
"Section": 1,
"Title": "MANAGEMENT OF INFORMATION SYSTEMS",
"Faculty": "Smith, John",
"Openings": 2,
"Capacity": 30,
"Status": "Open",
"Day": "MWF",
"StartTime": "1:25:00 PM",
"EndTime": "2:20 PM",
"Campus": " Main Campus",
"Building": " Science and Engineering",
"Room": " SE 341 Computer Science Lab",
"Credits": 3,
"Start Date": "8/30/2021",
"End Date": "12/17/2021rn"
},
{
"Line": 167,
"Department": "CSC",
"Number": 133,
"Section": 2,
"Title": "SURVEY OF COMPUTER SCIENCE",
"Faculty": "Scott, John",
"Openings": 6,
"Capacity": 15,
"Status": "Open",
"Day": "H",
"StartTime": "2:00:00 PM",
"EndTime": "4:50 PM",
"Campus": " Main Campus",
"Building": " Science and Engineering",
"Room": " SE 341 Computer Science Lab",
"Credits": 0,
"Start Date": "8/30/2021",
"End Date": "12/17/2021rn"
}
]
const filteredList = courseList.map(a => ({ Title: a.Title, Faculty: a.Faculty, Openings: a.Openings }));
console.log(filteredList);
Прочитайте на карте() фильтр() и уменьшить(). Это действительно полезные функции, хотя иногда их трудно осознать.
Комментарии:
1. Это сработало! Большое вам спасибо, это было намного проще, чем все остальные способы, которыми я пытался это сделать. Я раньше не слышал о map, мне определенно придется прочитать о том, как именно он работает, чтобы использовать его позже. Еще раз спасибо!