可以使用的ECMAScript 6和諧陣列方法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);
產生輸出:
[{項目: '牛奶',成本:1.99,數量:2}, {項目: '麪包',成本: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;
};
}
當您的循環完成後,您只需知道物品是否存在。 – ajp15243 2014-10-08 15:38:51
'push'會將一個項目添加到數組中。看看這個帖子http://stackoverflow.com/questions/4689856/how-to-change-value-of-object-which-is-inside-an-array-using-javascript-or-jquer – Bram 2014-10-08 15:40:04
你的代碼看起來不錯, 問題是什麼? – 2014-10-08 15:40:44