我有一个数组代表客户的商品购买,并在此逻辑中计算了项目小计:
function getSubtotal(arr) {
let total = 0.00;
arr.forEach(function(i) {
total += (i.qty * i.price)
});
return total; // 1274.21
}
当然,我得到了正确的结果,但有没有有效的方法在javascript中执行此操作?
let data = [
{
name : 'Item 1', qty: 2, price: 15.50 // 31
},
{
name : 'Item 2', qty: 17, price: 25.13 // 427.21
},
{
name : 'Item 3', qty: 102, price: 8.00 // 816
}
];
function getSubtotal(arr) {
let total = 0.00;
arr.forEach(function(i) {
total += (i.qty * i.price)
});
return total; // 1274.21
}
document.write(getSubtotal(data));

答案 0 :(得分:1)
使用reduce。这是一种简单的方法。
function getSubtotal (arr) {
return arr.reduce((total, obj) => {
return total + obj.qty * obj.price;
}, 0);
}
可以像这样写出
function getSubtotal (arr) {
return arr.reduce((total, obj) => total + obj.qty * obj.price, 0);
}
或
return arr.reduce((total, {qty, price}) => total + qty * price, 0);
答案 1 :(得分:1)
我想编辑@FrankCamara的答案,但无法解决。所以这里有不同的格式:
使用reduce。这是一种简单的方法。
>>> re_match = re.match(r's3://(?P<bucket>[^/]+)/(?P<item_path>.*)', s)
>>> re_match.groupdict()
{'bucket': 'dev-datalake-cluster-bucket-q37evqefmksl', 'item_path': 'raw/wfm/users.11315'}
&#13;
答案 2 :(得分:0)
以下是使用map
var Data = [
{name : 'Item 1', qty: 2, price: 15.50},
{name : 'Item 2', qty: 17, price: 25.13},
{name : 'Item 3', qty: 102, price: 8.00}
];
var total = 0;
var reformattedArray = Data.map(function(obj) {
total+=obj.qty*obj.price;
return total;
});
console.log(total); /*Sum of all qty*price`*/
console.log(reformattedArray); /*Sum of its and previous index as an array*/
console.log(reformattedArray[reformattedArray.length-1]); /*SubTotal, Last Index*/
console.log(total)
;
1274.21
console.log(reformattedArray)
;
[
31, /* (2*15.50) */
458.21, /* (2*15.50)+(17*25.13) */
1274.21 /* (2*15.50)+(17*25.13)+(102*8.00) */
]
console.log(reformattedArray[reformattedArray.length-1])
;
1274.21
答案 3 :(得分:0)
似乎for
循环比forEach
和reduce
更快。这是一个测试演示。
let data = [{
name: 'Item 1',
qty: 2,
price: 15.50 // 31
}, {
name: 'Item 2',
qty: 17,
price: 25.13 // 427.21
}, {
name: 'Item 3',
qty: 102,
price: 8.00 // 816
}];
function getSubtotalReduce(arr) {
return arr.reduce((total, item) => total + item.qty * item.price, 0.00);
}
console.time('reduce');
console.log(getSubtotalReduce(data));
console.timeEnd('reduce');
function getSubtotal(arr) {
let total = 0.00;
arr.forEach(function(i) {
total += (i.qty * i.price)
});
return total; // 1274.21
}
console.time('forEach');
console.log(getSubtotal(data));
console.timeEnd('forEach');
function getTotalFor(data) {
var total = 0;
for (var i = 0, len = data.length; i < len; i++) {
total += data[i].qty * data[i].price;
}
return total;
}
console.time('for');
console.log(getTotalFor(data));
console.timeEnd('for');
&#13;
来源:CodeReview