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

如何不借助第三方库按特定键值分组JavaScript对象数组

按flavor字段分组JavaScript对象数组

我有一组结构无序的JavaScript对象数据,这些对象拥有相同的键,但值可能不同:

const raw_data = {
   "sweets":[
      {
         "flavor":"chocolate",
         "product":"icecream",
         "price":3
      },
      {
         "flavor":"vanilla",
         "product":"icecream",
         "price":3
      },
      {
         "flavor":"chocolate",
         "product":"candy",
         "price":1
      },
      {
         "flavor":"chocolate",
         "product":"shake",
         "price":5
      },
      {
         "flavor":"vanilla",
         "product":"candy",
         "price":2
      },
      {
         "flavor":"strawberry",
         "product":"icecream",
         "price":3
      }
   ]
}

我希望得到一个新对象,其键为raw_data中对象的flavor字段的唯一值,对应的值为相同flavor的对象组成的数组,示例如下:

const cleaned_data = {
   "chocolate": [
     {
         "flavor":"chocolate",
         "product":"icecream",
         "price":3
      },
      {
         "flavor":"chocolate",
         "product":"candy",
         "price":1
      },
      {
         "flavor":"chocolate",
         "product":"shake",
         "price":5
      },
   ],
   "vanilla": [
     {
         "flavor":"vanilla",
         "product":"icecream",
         "price":3
      },
      {
         "flavor":"vanilla",
         "product":"candy",
         "price":2
      },
   ],
   "strawberry": [
     {
         "flavor":"strawberry",
         "product":"icecream",
         "price":3
      }
   ]
}

请提供一个不使用第三方库的实现函数。


实现函数

可以使用原生JavaScript的Array.prototype.reduce()方法完成分组,这是处理此类聚合场景的高效方案:

function groupByFlavor(data) {
  return data.sweets.reduce((acc, item) => {
    // 初始化当前flavor对应的数组(如果不存在)
    acc[item.flavor] = acc[item.flavor] || [];
    // 将当前对象加入对应数组
    acc[item.flavor].push(item);
    return acc;
  }, {});
}

// 调用示例
const cleaned_data = groupByFlavor(raw_data);
console.log(cleaned_data);

逻辑说明

  1. reduce遍历:以空对象为初始累加器,逐个遍历sweets数组中的每个对象。
  2. 数组初始化:使用acc[item.flavor] || []简化判断,若当前flavor未在累加器中,则创建空数组。
  3. 元素追加:将当前对象推入对应flavor的数组,最终返回构建好的分组对象。

该实现时间复杂度为O(n),仅依赖原生API,无需任何第三方库。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:15:50