欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

javascript - 求助关于实现购物车数组的问题!!!!!!

程序员文章站 2022-05-10 23:08:25
...
每样商品有id, title, price, 每点击一次购买我就将其加入数组,但是我想根据Id判断,当重复加入一件产品到购物车的时候,将相同的产品加入一个二维数组,怎么写呢?
[
    [
        {鸡腿},{鸡腿},{鸡腿},{鸡腿}
    ],
    [
        {狗腿},{狗腿},{狗腿}
    ],
    [
        {猫咪},{猫咪},{猫咪},{猫咪},{猫咪},{猫咪}
    ]
]




谢谢各位,确实我这种思路确实很辣鸡,感谢你们的建议!

回复内容:

每样商品有id, title, price, 每点击一次购买我就将其加入数组,但是我想根据Id判断,当重复加入一件产品到购物车的时候,将相同的产品加入一个二维数组,怎么写呢?

[
    [
        {鸡腿},{鸡腿},{鸡腿},{鸡腿}
    ],
    [
        {狗腿},{狗腿},{狗腿}
    ],
    [
        {猫咪},{猫咪},{猫咪},{猫咪},{猫咪},{猫咪}
    ]
]




谢谢各位,确实我这种思路确实很辣鸡,感谢你们的建议!

上面的朋友说的没错,你的这种思路本身不可取。二维数组里面全是一样的东西。。有点坑。
这种格式好点,参考一下

var cart = {
    'id01':{n:'鸡腿', count: 4},
    'id02':{n:'鸭腿', count: 3},
    'id03':{n:'猪腿', count: 2},
    'id04':{n:'狗腿子', count: 1}
}

不过,如果你非要这样子做

var list = [
    [{n:'鸡腿'},{n:'鸡腿'},{n:'鸡腿'},{n:'鸡腿'},{n:'鸡腿'}],
    [{n:'鸭腿'},{n:'鸭腿'},{n:'鸭腿'},{n:'鸭腿'}],
    [{n:'猪腿'},{n:'猪腿'},{n:'猪腿'},{n:'猪腿'}]
];

function fn(o){
    var inArray = false;
    list.map(function(item){
        if( item.indexOf(o) > -1){
            inArray = true;
            item.push(o);
        }
    });
    inArray || list.push([o]);
}

fn(list[1][1]);

fn({n:'狗腿子'});

这只是参考,不提倡

不建议这么写,购物车的数据结构应该存的是商品的id和数量(假设这里商品id就是名字)

{
    "鸡腿": 4,
    "狗腿": 3,
    "猫咪": 6
}

具体实现的时候,购物车物品的增减,只要对后面这个数字进行加减就可以了

你这思路不对啊 , 上面那个说的对 购物车主体应该是$a = ['id'=>number] ,然后价格和名称应该是另外一个数组 $b = ['id'=>['name'=>name,'price'=>price]],总价格就是 $totalPrice = $a['id']*$b['id']['price']

同意楼上观点,购物车内的东西应该是个总体,但是价格个人觉得不应该存储到购物车数组中,因为你加入时候的价格和付款时候的价格不一定是相同的。存储的应该是唯一标识符id和数量number,你如果存储title的话,价格price,如果商家改了名字或者价格,你的设计该怎么处理呢!

$shoppingCart = [
    '101' => 4,//鸡腿
    '102' => 5,//狗腿
    '103' => 6//鸭腿
];

首先谢邀。

其实这个问题我昨天都看到这个问题了,我自己也认为楼上几位回答的不错。但见题主又邀请了我,只能发表下我的看法,当作抛砖引玉了。


其实我觉得几维数组不重要,怎么写不重要,重要的是思路。我主要对这方面做一个抛砖引玉的陈述。
其实现在这个年代吧,面向对象虽然是老生常谈的东西,但很多人仍然不太会加以运用,所以致使问题的复杂度直线上升,我们尝试以面向对象来解决这个问题试试吧:

//全局对象
var item_arr = {};

//操作函数
function add_(id, name, price, count) {
    var item = {
        id: id,
        name: name,
        price: price,
        count: count
    }
    var obj = item_arr[id]
    if (obj) {
        item.count = obj.count + count;
    }
    item_arr[item.id] = item;
}
//code by rozbo ,强力免山寨


//模拟添加购物操作
add_(19, "狗腿子", 16, 20);
add_(1, "鸡腿子", 12, 2);
add_(126, "羊腿子", 6, 6);
add_(126, "羊腿子", 6, 6);


//输出信息,计算价格
var price_totle = 0;
for (var id in item_arr) {
    var item = item_arr[id];
    var price_curr = item.count * item.price;
    price_totle += price_curr;
    console.info("当前有%s%d个,总价%d元", item.name, item.count, price_curr);
}
console.info("共计%d元,祝您购物愉快!", price_totle);

输出结果
javascript - 求助关于实现购物车数组的问题!!!!!!