You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中按category属性值将对象数组分组为指定结构

JavaScript对象数组按分类聚合实现

现有如下JavaScript对象数组:

const data = [
{code: 1, name: "Send OSMI SMS 1", category: "OSMI"},
{code: 2, name: "Send OSMI SMS 2", category: "OSMI"},
{code: 3, name: "Send OSMI SMS 3", category: "OSMI"},
{code: 4, name: "Send OSMI Email 1", category: "OSMI"},
{code: 5, name: "Send OSMI Email 2", category: "OSMI"},
{code: 6, name: "Send OSMI Email 3", category: "OSMI"},
{code: 12, name: "Send advices for cleaning 3.0 Email 1", category: "Advice"},
{code: 13, name: "Send advices for cleaning 2.4 Email 1", category: "Advice"},
{code: 14, name: "Send advices for cleaning 3M Email 1", category: "Advice"},
{code: 15, name: "Send advices for cleaning 3.0 Email 1", category: "Advice"},
{code: 16, name: "Send advices for cleaning 2.4 Email 1", category: "Advice"},
{code: 17, name: "Send advices for cleaning 3М Email 1", category: "Advice"},
{code: 18, name: "Send advices for cleaning 3.0 Email 2", category: "Advice"},
{code: 19, name: "Send advices for cleaning 3.0 Email 3", category: "Advice"},
{code: 20, name: "Emergency VC-1", category: null},
{code: 21, name: "Test", category: null},
{code: 22, name: "Telegram test", category: null}
]

转换要求

将该数组转换为新结构:以原数组的category属性值为新对象的键,对应分类下所有项的name属性组成的数组为值,预期输出如下:

[
{"OSMI" : ["Send OSMI SMS 1", "Send OSMI SMS 2", "Send OSMI SMS 3" ...]},
{"Advice" : ["Send advices for cleaning 2.4 Email 1",  ...]},
{null : ["Emergency VC-1", "Test", "Telegram test"]},
]

最优实现方案

使用reduce()方法遍历数组即可完成聚合,代码如下:

const result = data.reduce(function (acc, item) {
        acc[item.category] = acc[item.category] || [];
        acc[item.category].push(item.name);
        return acc;
    }, Object.create(null));

console.log(result);

注:上述代码输出的是单个聚合对象,如果需要得到示例中「每个分类单独作为一个对象放在数组内」的格式,可追加如下处理代码:

const formattedResult = Object.entries(result).map(([key, value]) => ({[key]: value}))
console.log(formattedResult)

内容的提问来源于stack exchange,提问作者hideo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 03:27:05