守着一只汪
您应该能够为此目的使用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);