我有一个帐单数组,其中包含用户选择放入其中的项目。
如, {item:' Milk',费用:1.99,数量:1}
我想要做的是,如果将另一个牛奶添加到篮子而不添加另一个牛奶项目,则将数量更新为2。这是我目前的代码:
for (var i = 0; i < bill.length; i++) {
if (newItem == bill[i].item) {
bill[i].quantity++;
}
//IF IT CANNOT BE FOUND ADD NEW ITEM
bill.push({
item: newItem,
cost: cost,
quantity: 1});
}
答案 0 :(得分:2)
break
离开循环并设置一个标志,如果找到它:
var found = false;
for(var i = 0; i < bill.length; i++){
if(newItem == bill[i].item){
bill[i].quantity++;
found = true;
break;
}
}
if (!found) {
bill.push({
item: newItem,
cost: cost,
quantity: 1
});
}
答案 1 :(得分:0)
您可以使用ECMAScript 6 Harmony数组方法findIndex()
:
function addItem(newItem, cost, quantity) {
var index = bill.findIndex(function(element) {
return element.item === newItem;
});
if (index >= 0) {
bill[index].quantity += quantity;
} else {
bill.push({item: newItem, cost: cost, quantity: quantity});
}
}
它将返回与谓词匹配的数组元素的索引,如果找不到这样的元素,则返回-1
。例如,以下代码:
var bill = [{ item: 'Milk', cost: 1.99, quantity: 1 }];
addItem('Milk', 1.99, 1);
addItem('Bread', 1.00, 1);
console.log(bill);
产生输出:
[{item:&#39; Milk&#39;,费用:1.99,数量:2}, {item:&#39;面包&#39;,费用:1,数量:1}]
findIndex()
方法尚未得到广泛支持,但有一个findIndex()
polyfill:
if (!Array.prototype.findIndex) {
Array.prototype.findIndex = function(predicate) {
if (this == null) {
throw new TypeError('Array.prototype.find called on null or undefined');
}
if (typeof predicate !== 'function') {
throw new TypeError('predicate must be a function');
}
var list = Object(this);
var length = list.length >>> 0;
var thisArg = arguments[1];
var value;
for (var i = 0; i < length; i++) {
value = list[i];
if (predicate.call(thisArg, value, i, list)) {
return i;
}
}
return -1;
};
}