购物车实现Javascript。TypeError:无法设置属性';id';未定义的
我正在尝试实现基本的购物车,但我遇到了一个问题。我需要检查商品是否已经存在于购物车中,如果存在,则增加其数量。但是当我试图比较购物车实现Javascript。TypeError:无法设置属性';id';未定义的,javascript,jquery,arrays,Javascript,Jquery,Arrays,我正在尝试实现基本的购物车,但我遇到了一个问题。我需要检查商品是否已经存在于购物车中,如果存在,则增加其数量。但是当我试图比较购买[I].id=this.arr[I].id它给我以下错误 TypeError:无法设置未定义的属性“id”` 购物车代码实现示例: var Cart = { AddToCart:function(arr,buttonId){ var purchases = [{id: null,name: null,price: null,quant
购买[I].id=this.arr[I].id代码>它给我以下错误
TypeError:无法设置未定义的属性“id”`
购物车代码实现示例:
var Cart = {
AddToCart:function(arr,buttonId){
var purchases = [{id: null,name: null,price: null,quantity: 0}];
this.arr = arr;
this.buttonId = buttonId;
for(var i = 0; i <this.arr.length; i++){
if(this.buttonId === this.arr[i].id && purchases[i].id === this.arr[i].id && $("#oredersUL, #" + this.buttonId).length){
purchases[i].quantity++;
console.log(purchases[i]);
}
else {
purchases[i].id = this.arr[i].id;
purchases[i].name = this.arr[i].name;
purchases[i].price = this.arr[i].price;
purchases[i].quantity++;
console.log(purchases);
}
}
}
};
给定数组:
var phones = [
{
"age": 0,
"id": "motorola-xoom-with-wi-fi",
"imageUrl": "img/phones/motorola-xoom-with-wi-fi.0.jpg",
"name": "Motorola XOOM\u2122 with Wi-Fi",
"snippet": "The Next, Next Generation\r\n\r\nExperience the future with Motorola XOOM with Wi-Fi, the world's first tablet powered by Android 3.0 (Honeycomb).",
"price": 150
},
您正在询问purchases[i].id==this.arr[i].id
但purchases[i]
是否不存在(即使i
的其他值可能不存在)
首先检查索引i
处的元素是否存在:
if (typeof purchases[i] === 'undefined')
现在,如果购买[i]
不存在,您需要创建它。我会使用push
:
purchases.push({
"id": this.arr[i].id,
"name": this.arr[i].name,
"price": this.arr[i].price,
// I have not included "quantity" here because
// what you have right now doesn't make sense:
// purchases[i] doesn't exist
// so the same is true for purchases[i].quantity
});
使用.push
将意味着您不能信任每个数组元素的内容的数组索引(但这可能是个坏主意-这就是为什么您的对象具有id
)
这意味着,要更新正确的数组元素,您将需要执行(通过id查找数组中的对象)如果在生成错误的行之前执行console.log(arr)
,您会得到什么?您正在使用相同的索引进行purchases
和arr
,尽管您没有测试“purchases[i]`由于null
@rorymcrossan,它在位置i处为我提供了数组:[Object]0:Objectid:“带wi-fi的摩托罗拉xoom”名称:“摩托罗拉xoom”™ 使用Wi-Fi“价格:150数量:1协议:对象长度:1协议:阵列[0]
purchases.push({
"id": this.arr[i].id,
"name": this.arr[i].name,
"price": this.arr[i].price,
// I have not included "quantity" here because
// what you have right now doesn't make sense:
// purchases[i] doesn't exist
// so the same is true for purchases[i].quantity
});