如何计算其财产标准上所有项目的小计:qty * price?

时间:2017-03-22 11:08:58

标签: javascript

我有一个数组代表客户的商品购买,并在此逻辑中计算了项目小计:

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));




4 个答案:

答案 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;
&#13;
&#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循环比forEachreduce更快。这是一个测试演示。

&#13;
&#13;
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;
&#13;
&#13;

来源:CodeReview