如何计算JavaScript嵌套数组shoppingcart中products的price平均值
JavaScript嵌套数组提取price计算平均值实现方案
直接使用数组内置方法即可实现需求,可运行代码如下:
let shoppingcart = [ { orderId: 100000, dayofWeeks: "May.06.2020", products: [ { productId: 1111, quantity: 3, price: 3.0 } ] }, { orderId: 100001, dayofWeeks: "Aug.12.2020", products: [ { productId: 1111, quantity: 1, price: 3.0 }, { productId: 1112, quantity: 1, price: 1.0 } ] }, ]; // 提取所有商品的price到一维数组 const allPrices = shoppingcart.flatMap(order => order.products.map(product => product.price)); // 输出所有price值 allPrices.forEach(price => { console.log(`price: ${price.toFixed(1)}`); }); // 计算算术平均值 const totalPrice = allPrices.reduce((sum, current) => sum + current, 0); const average = (totalPrice / allPrices.length).toFixed(2); // 输出最终平均值 console.log(`average: ${average}`);
代码说明
flatMap会遍历所有订单,把每个订单下的products数组中的price提取后自动摊平为一维数组,你的示例中得到的allPrices值为[3, 3, 1]toFixed(1)用于保证输出的price保留1位小数,符合要求的输出格式reduce方法用于累加所有price得到总和,总和除以price的总数量得到平均值,toFixed(2)控制平均值保留2位小数
运行输出结果
price: 3.0 price: 3.0 price: 1.0 average: 2.33
旧环境兼容方案
如果需要兼容不支持ES2019 flatMap的运行环境,可将提取allPrices的代码替换为:
const allPrices = [].concat.apply([], shoppingcart.map(order => order.products.map(p => p.price)));
内容的提问来源于stack exchange,提问作者Jezz
相关产品推荐
相关产品推荐

