Отфильтровать определенные ключи со значениями из JSON в Javascript?

#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, мне определенно придется прочитать о том, как именно он работает, чтобы использовать его позже. Еще раз спасибо!