猿问

处理对象数组

我有这个代码,


"data": [

    {

        "pid": 1,

        "status": "done",

        "title": "a"

    },

    {

        "pid": 1,

        "status": "pending",

        "title": "a"

    },

    {

        "pid": 1,

        "status": "pending",

        "title": "21"

    },

    {

        "pid": 2,

        "status": "pending",

        "title": "c"

    }

]

我正在尝试像这样处理它


"data": [

    {

        "pid": 1,

        "done": 1,

        "pending":2

    },

    {

        "pid": 2,

        "done": 0,

        "pending":1

    }

]

我已经尝试了很多来产生我想要的结果,但没有运气,现在我在这里发布以获得一些帮助。


慕慕森
浏览 101回答 1
1回答

守着一只汪

您应该能够为此目的使用Array.reduce 。我们创建一个映射,以 pid 为键,然后为每个已完成或待处理的对象加 1。 然后Object.values会再次将此映射转换为数组。我希望这可以帮助你!data = [    {        "pid": 1,        "status": "done",        "title": "a"    },    {        "pid": 1,        "status": "pending",        "title": "a"    },    {        "pid": 1,        "status": "pending",        "title": "21"    },    {        "pid": 2,        "status": "pending",        "title": "c"    }]let result = Object.values(data.reduce( (map, d) => {    if (!map[d.pid]) map[d.pid] = { pid: d.pid, done: 0, pending: 0 };    if (d.status === "done") map[d.pid].done++;    if (d.status === "pending") map[d.pid].pending++;    return map;}, {} ));console.log("Result:", result);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答