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

JavaScript购物车开发:指定商品ID价格求和并生成新数组

JavaScript购物车功能实现与数据处理

一、现有商品加入购物车函数

已实现的fuBuyNow函数代码如下:

function fuBuyNow() {
    var prodqty = 1;
    var prodid = localStorage.ls_productID;
    var prodprice = $('#ppriceoffer').html();
    var cartItem = {
        productid: prodid,
        productqty: prodqty,
        productprice: prodprice
    };
    var cartItemJSON = JSON.stringify(cartItem);
    console.log(cartItemJSON);

    var cartArray = new Array();
    // If javascript shopping cart session is not empty
    if (localStorage.getItem('shopping-cart')) {
        cartArray = JSON.parse(localStorage.getItem('shopping-cart'));
    }
    cartArray.push(cartItemJSON);

    var cartJSON = JSON.stringify(cartArray);
    localStorage.setItem('shopping-cart', cartJSON);
}

注意:当前函数存在逻辑问题——将序列化后的JSON字符串推入数组,后续从localStorage读取后,数组内会全是字符串格式的对象,不利于后续数据处理。建议直接推入cartItem对象再统一序列化,修正后的核心逻辑如下:

// 替换原代码中push和序列化部分
cartArray.push(cartItem); // 直接推入对象而非字符串
var cartJSON = JSON.stringify(cartArray);
localStorage.setItem('shopping-cart', cartJSON);

二、指定商品价格求和并生成新数组

针对给定的购物车数据,需筛选productid为10001和10005的商品,按商品ID分组计算总数量与总价,最终生成新数组。

原始数据

var obj = "[{\"slno\":\"1\",\"productid\":\"10001\",\"qty\":\"1\",\"price\":\"250\"},{\"slno\":\"2\",\"productid\":\"10005\",\"qty\":\"1\",\"price\":\"350\"},{\"slno\":\"3\",\"productid\":\"10001\",\"qty\":\"1\",\"price\":\"250\"},{\"slno\":\"4\",\"productid\":\"10003\",\"qty\":\"1\",\"price\":\"450\"},{\"slno\":\"5\",\"productid\":\"10005\",\"qty\":\"1\",\"price\":\"350\"}]";

实现代码

// 1. 解析JSON字符串为数组
const cartData = JSON.parse(obj);

// 2. 定义需要统计的商品ID列表
const targetIds = ['10001', '10005'];

// 3. 分组统计总数量与总价
const groupedData = cartData
  .filter(item => targetIds.includes(item.productid))
  .reduce((acc, item) => {
    const id = item.productid;
    const price = Number(item.price);
    const qty = Number(item.qty);

    if (!acc[id]) {
      acc[id] = {
        productid: id,
        totalQty: 0,
        totalPrice: 0
      };
    }

    acc[id].totalQty += qty;
    acc[id].totalPrice += price * qty;

    return acc;
  }, {});

// 4. 将分组对象转换为数组
const finalResult = Object.values(groupedData);

console.log(finalResult);

输出结果

[
  { productid: '10001', totalQty: 2, totalPrice: 500 },
  { productid: '10005', totalQty: 2, totalPrice: 700 }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:47:33