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

按数组key分组并以该key为新数组索引的实现需求

如何按指定key(term_id)将数组分组并生成目标结构?

嘿,这事儿好办!我来教你怎么把数组按term_id分组,生成你想要的新结构~

先再明确下你的需求:

原数组示例:

const array1 = [
  { term_id: "1", capacity: "11", price: "452" },
  { term_id: "2", capacity: "33", price: "44" },
  { term_id: "1", capacity: "1", price: "2" }
];

期望生成的新数组:

const array2 = {
  "1": {
    terms: [
      { capacity: "11", price: "452" },
      { capacity: "1", price: "2" }
    ]
  },
  "2": {
    terms: [
      { capacity: "33", price: "44" }
    ]
  }
};

方案一:JavaScript 实现(用reduce方法)

这是前端场景下最常用的高效解法,利用数组的reduce方法一步到位:

const array1 = [
  { term_id: "1", capacity: "11", price: "452" },
  { term_id: "2", capacity: "33", price: "44" },
  { term_id: "1", capacity: "1", price: "2" }
];

const array2 = array1.reduce((acc, currentItem) => {
  // 取出当前项的term_id作为新数组的索引
  const termId = currentItem.term_id;
  
  // 如果当前索引在结果对象中不存在,先初始化一个带空terms数组的结构
  if (!acc[termId]) {
    acc[termId] = { terms: [] };
  }
  
  // 把当前项的capacity和price提取出来,push到对应索引的terms数组里
  acc[termId].terms.push({
    capacity: currentItem.capacity,
    price: currentItem.price
  });
  
  return acc;
}, {}); // 初始值是一个空对象,用来存储最终分组结果

console.log(array2);

代码解释:

  • reduce会遍历原数组的每一项,acc是我们用来累积结果的对象,初始值为{}。
  • 每遍历一个元素,先拿到它的term_id作为键。
  • 如果这个键还没在acc里,就先创建一个包含terms空数组的对象。
  • 然后把当前元素的capacity和price提取出来,添加到对应键的terms数组中。
  • 循环结束后,acc就是你要的最终结构啦~

方案二:PHP 实现(用foreach循环)

如果是后端PHP场景,用foreach循环也能轻松实现:

$array1 = [
    ['term_id' => '1', 'capacity' => '11', 'price' => '452'],
    ['term_id' => '2', 'capacity' => '33', 'price' => '44'],
    ['term_id' => '1', 'capacity' => '1', 'price' => '2']
];

$array2 = [];
foreach ($array1 as $item) {
    $termId = $item['term_id'];
    // 检查当前term_id是否已存在于结果数组中,不存在则初始化
    if (!isset($array2[$termId])) {
        $array2[$termId] = ['terms' => []];
    }
    // 将当前项的capacity和price加入对应terms数组
    $array2[$termId]['terms'][] = [
        'capacity' => $item['capacity'],
        'price' => $item['price']
    ];
}

print_r($array2);

运行这段代码后,输出的结果完全符合你的期望~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:59:24