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

如何将含category与level的数组转换为分组目标对象?

最优转换方案:数组按分类归并

用Array.prototype.reduce是实现这个转换的最优方法,仅需一次数组遍历(时间复杂度O(n)),代码简洁且逻辑清晰:

基础实现代码

const originalArray = [
    { "level": "level3", "category": "car" },
    { "level": "level1", "category": "bike" },
    { "level": "level2", "category": "car" },
    { "level": "level5", "category": "bike" }
];

const result = originalArray.reduce((acc, item) => {
    // 若当前分类未在累加器中,初始化空数组
    if (!acc[item.category]) {
        acc[item.category] = [];
    }
    // 将当前level推入对应分类的数组
    acc[item.category].push(item.level);
    return acc;
}, {});

console.log(result);
// 输出:{ car: ["level3", "level2"], bike: ["level1", "level5"] }

简化版代码(解构赋值+逻辑或)

可以通过解构赋值直接提取属性,并用逻辑或运算符简化数组初始化步骤,让代码更紧凑:

const result = originalArray.reduce((acc, { category, level }) => {
    acc[category] = acc[category] || [];
    acc[category].push(level);
    return acc;
}, {});

原理说明

  • reduce的核心是用一个累加器(这里是初始空对象{})逐步收集处理结果
  • 遍历数组每一项时,先判断当前分类是否已存在于累加器中,不存在则创建对应空数组
  • 将当前项的level值推入对应分类的数组,最终返回完整的分组对象

这种方案既保证了性能,又兼顾了代码可读性,是处理这类数组分组问题的标准最优解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:43:08