使用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
相关产品推荐
相关产品推荐

