Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更新数组中的对象时,它会工作,但也会添加一个神秘的数组_Javascript - Fatal编程技术网

Javascript 更新数组中的对象时,它会工作,但也会添加一个神秘的数组

Javascript 更新数组中的对象时,它会工作,但也会添加一个神秘的数组,javascript,Javascript,我正在尝试在我正在制作的个人项目上创建“添加到购物车”功能。购物车本身是一个具有产品数组和小计的对象。看起来是这样的: let cart={ 产品:[ {prodId:1,数量:1,价格:6.99}, {prodId:2,数量:2,价格:4.99}, {prodId:3,数量:1,价格:15.99}, ], 小计:32.96, }; 我现在只对产品感兴趣,所以我就这么做了 products=cart.products,因此我正在处理以下问题: 产品=[ {prodId:1,数量:1,价格:6.

我正在尝试在我正在制作的个人项目上创建“添加到购物车”功能。购物车本身是一个具有产品数组和小计的对象。看起来是这样的:

let cart={
产品:[
{prodId:1,数量:1,价格:6.99},
{prodId:2,数量:2,价格:4.99},
{prodId:3,数量:1,价格:15.99},
],
小计:32.96,
};
我现在只对产品感兴趣,所以我就这么做了
products=cart.products
,因此我正在处理以下问题:

产品=[
{prodId:1,数量:1,价格:6.99},
{prodId:2,数量:2,价格:4.99},
{prodId:3,数量:1,价格:15.99}
];
我有逻辑来检查产品是否已经在购物车中,因此当用户在购物车中的某个项目上单击“添加到购物车”时,我正在努力添加数量。其逻辑如下所示:

让productId=3;
让oldProduct=products.filter(p=>p.prodId==productId);
设index=products.indexOf(oldProduct);
如果(索引>-1){
产品.切片(索引1);
}
const updatedProduct=oldProduct.map(p=>p.quantity++);
产品。推送(更新的产品);
我打算做的是:

  • 从数组中取出现有产品并将其绑定到
    oldProduct
  • 使用
    slice
  • 使用
    map
    将1添加到数量,并将其绑定到
    updatedProduct
  • 将此更新产品推送到
    产品上
  • 这是可行的,但数组也会添加到
    产品中。因此,控制台中的输出如下所示:

    [
    {prodId:1,数量:1,价格:6.99},
    {prodId:2,数量:2,价格:4.99},
    {prodId:3,数量:2,价格:15.99},
    [ 1 ]
    ]
    
    我知道数组是增加的数量。我可能应该提到,在浏览器中,每当您点击购物车中已经存在的产品的按钮时,一个新的阵列就会得到添加的产品,因此,如果您在第三项中单击按钮5次,产品阵列将如下所示:

    [
    {prodId:1,数量:1,价格:6.99},
    {prodId:2,数量:2,价格:4.99},
    {prodId:3,数量:6,价格:15.99},
    [ 1 ],
    [ 2 ],
    [ 3 ],
    [ 4 ],
    [ 5 ]
    ]
    
    我认为这与
    updatedProduct
    有关,因为当我记录它时,它只是数组,但如果它只是数组,那么数量不会增加,所以我真的很困惑。另外,当我检查
    updatedProduct
    typeOf
    时,它说它是一个对象,所以我真的不知道发生了什么。任何帮助都将不胜感激。

    就您而言

    oldProduct.map(p => p.quantity++);
    
    返回包含新数量的数组,然后将其推入
    产品
    数组

    您希望获得具有更新数量的对象,并将其推送

    而且

    • 您可以使用
    • 我相信,考虑到你想做的事,你是在寻找,而不是
    let产品=[
    {prodId:1,数量:1,价格:6.99},
    {prodId:2,数量:2,价格:4.99},
    {prodId:3,数量:1,价格:15.99}
    ];
    设productId=3;
    让index=products.findIndex(p=>p.prodId==productId);//findIndex
    如果(索引>-1){
    让oldProduct=产品[索引]
    产品.拼接(索引1);//拼接
    oldProduct.quantity++;
    products.push(oldProduct);//推送对象
    }
    
    控制台日志(产品)我认为你想得太多了,当你指的是
    find
    时,你还使用了
    filter
    ,当你指的是
    splice
    时,你还使用了
    slice
    。不过不用担心。我想你想要这样的东西:

    let cart={
    产品:[
    {prodId:1,数量:1,价格:6.99},
    {prodId:2,数量:2,价格:4.99},
    {prodId:3,数量:1,价格:15.99},
    ],
    小计:32.96,
    };
    设productId=3;
    cart.products.map(p=>{
    if(p.prodId==productId){
    p、 数量++;
    购物车小计+=p.价格;
    }
    });
    
    console.log(cart)
    oldProduct.map(p=>p.quantity++)
    返回一个包含新值
    p的数组。quantity
    接受两个参数,“从开始到结束(不包括结束)”,其中开始和结束表示该数组中项目的索引。不
    products.slice(索引,1)做你想做的?我相信你想在那里使用