首页 > 解决方案 > 用Javascript中的JSON值过滤掉特定的键?

问题描述

我正在尝试在 javascript 中创建一个动态生成的表,并且我有一个 JSON,我需要从中过滤特定信息

要从中提取的 JSON (courseList)

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\/2021\r\n"
        },
        {
            "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\/2021\r\n"
        }
    ]

我想运行某种方法从现有的 JSON 生成另一个 JSON。看起来像这样

预期结果

let filteredCourses = [
        {
            "Title": "MANAGEMENT OF INFORMATION SYSTEMS",
            "Faculty": "Smith, John",
            "Openings": 2,
        },
        {
            "Title": "SURVEY OF COMPUTER SCIENCE",
            "Faculty": "Scott, John",
            "Openings": 6,
        }
    ]

我还是 javascript 的新手,但我知道我使用过的数组有一个过滤器方法,但这只给了我课程列表中的键或值。我也尝试过使用 push 方法,但运气不佳。

有什么方法可以将我需要的特定键和值对直接过滤到 JSON 中,或者我可以分别过滤掉键和值并将它们组合起来吗?我不确定最好的方法是什么。

标签: javascriptjson

解决方案


filter 函数用于根据您定义的函数从数组中过滤元素。

例如,如果您想过滤掉所有没有空缺的课程,您可以使用

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\/2021\r\n"
    },
    {
        "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\/2021\r\n"
    }
]
    
const filteredList = courseList.map(a => ({ Title: a.Title, Faculty: a.Faculty, Openings: a.Openings }));
 
console.log(filteredList);

阅读 map() filter() 和 reduce()。它们是非常有用的功能,如果有时有点难以理解的话。


推荐阅读