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)代码>做你想做的?我相信你想在那里使用