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

使用JavaScript从对象数组生成指定结构新对象的方法

按股票代码分组收集价格数组

给定一个包含股票信息的对象数组,我们需要将每个对象的ticker作为键,把对应的price值收集为数组作为值,生成一个新的分组对象。

示例输入

const prices = [
  { ticker: 'msft', price: 14.3 },
  { ticker: 'msft', price: 10.2 },
  { ticker: 'ibm', price: 9.2 },
  { ticker: 'amzn', price: 10.2 },
]; 

期望输出

{
  "msft": [10.2, 14.3],
  "ibm": [9.2],
  "amzn": [10.2]
}

解决方案1:使用reduce方法(推荐)

reduce是处理这类分组场景最简洁的方式,通过遍历数组逐步构建目标对象:

const prices = [
  { ticker: 'msft', price: 14.3 },
  { ticker: 'msft', price: 10.2 },
  { ticker: 'ibm', price: 9.2 },
  { ticker: 'amzn', price: 10.2 },
];

const groupedPrices = prices.reduce((acc, curr) => {
  // 初始化当前ticker对应的数组(如果不存在)
  acc[curr.ticker] = acc[curr.ticker] || [];
  // 将当前价格推入对应数组
  acc[curr.ticker].push(curr.price);
  return acc;
}, {});

// 可选:对每个价格数组进行升序排序,匹配示例输出
Object.keys(groupedPrices).forEach(key => {
  groupedPrices[key].sort((a, b) => a - b);
});

console.log(groupedPrices);

解决方案2:使用forEach遍历(直观易懂)

如果觉得reduce不够直观,可以用forEach遍历数组手动构建对象:

const prices = [
  { ticker: 'msft', price: 14.3 },
  { ticker: 'msft', price: 10.2 },
  { ticker: 'ibm', price: 9.2 },
  { ticker: 'amzn', price: 10.2 },
];

const groupedPrices = {};

prices.forEach(item => {
  if (!groupedPrices[item.ticker]) {
    groupedPrices[item.ticker] = [];
  }
  groupedPrices[item.ticker].push(item.price);
});

// 可选:对价格数组升序排序
Object.values(groupedPrices).forEach(arr => arr.sort((a, b) => a - b));

console.log(groupedPrices);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:27:23