编辑对象数组中的对象 属性
Edit property of an object in array of objects
我有一个 class itemCollection
存储有关购买的信息。此 class 的数组 _items
为 属性,其中购买是商店。当用户在购物车中添加新购买时,此 class 使用 addItem
方法将该项目添加到 _items
属性 如果它已经有此项目,则此方法迭代 quantity
属性 如果不在数组中添加新项目。
Problem is that instead of adding new item in array when other item is chosen its keeps incrementing quantity 属性 of a first item that was added.
cartCollection
class(对象):
var cartCollection = {
_items: [],
addItem: function(obj) {
'use strict';
var purchase = {
item: {
id: obj.id,
name: obj.name,
price: obj.price
},
thisItemTotal: obj.price,
quantity: 1
};
var result = _.findWhere(this._items, purchase.item.id);
console.log(result);
if (typeof result != 'undefined') {
//console.log(result);
var index = _.findIndex(this._items, {
id: result.item.id
});
//console.log(index);
result.quantity++;
this._items[index] = result;
this._itemTotalPrice();
} else if (typeof result === 'undefined') {
console.log("Im was called!");
this._items.push(purchase);
console.log(this._items);
}
},
...
您的 findWhere 语句已损坏。应该是:
var result = _.findWhere(this._items, {id:purchase.item.id});
祝你好运
由于 purchase 没有 ID,但是 "item" 有 ID,正确的查找语句应该是:
var result = _.find(this._items, function(item) {
return item.item.id == purchase.item.id;
});
最好将 _items
重命名为 _purchases
以消除歧义
完整的代码应该是这样的:
addItem: function(obj) {
'use strict';
var purchase = {
item: _.pick(obj, 'id', 'name', 'price')
thisItemTotal: obj.price,
quantity: 1
};
var result = _.find(this._items, function(item) {
return item.item.id == purchase.item.id;
});
console.log(result);
if (result) {
result.quantity++;
this._itemTotalPrice();
}
else {
console.log("Im was called!");
this._items.push(purchase);
console.log(this._items);
}
},
我有一个 class itemCollection
存储有关购买的信息。此 class 的数组 _items
为 属性,其中购买是商店。当用户在购物车中添加新购买时,此 class 使用 addItem
方法将该项目添加到 _items
属性 如果它已经有此项目,则此方法迭代 quantity
属性 如果不在数组中添加新项目。
Problem is that instead of adding new item in array when other item is chosen its keeps incrementing quantity 属性 of a first item that was added.
cartCollection
class(对象):
var cartCollection = {
_items: [],
addItem: function(obj) {
'use strict';
var purchase = {
item: {
id: obj.id,
name: obj.name,
price: obj.price
},
thisItemTotal: obj.price,
quantity: 1
};
var result = _.findWhere(this._items, purchase.item.id);
console.log(result);
if (typeof result != 'undefined') {
//console.log(result);
var index = _.findIndex(this._items, {
id: result.item.id
});
//console.log(index);
result.quantity++;
this._items[index] = result;
this._itemTotalPrice();
} else if (typeof result === 'undefined') {
console.log("Im was called!");
this._items.push(purchase);
console.log(this._items);
}
},
...
您的 findWhere 语句已损坏。应该是:
var result = _.findWhere(this._items, {id:purchase.item.id});
祝你好运
由于 purchase 没有 ID,但是 "item" 有 ID,正确的查找语句应该是:
var result = _.find(this._items, function(item) {
return item.item.id == purchase.item.id;
});
最好将 _items
重命名为 _purchases
以消除歧义
完整的代码应该是这样的:
addItem: function(obj) {
'use strict';
var purchase = {
item: _.pick(obj, 'id', 'name', 'price')
thisItemTotal: obj.price,
quantity: 1
};
var result = _.find(this._items, function(item) {
return item.item.id == purchase.item.id;
});
console.log(result);
if (result) {
result.quantity++;
this._itemTotalPrice();
}
else {
console.log("Im was called!");
this._items.push(purchase);
console.log(this._items);
}
},