对象数组中的频率计数器

时间:2015-08-13 10:39:23

标签: javascript arrays

我有一组对象。

对象看起来像这样:

0: Object
_id: "555baa9a034de05173e9fee4"
name: "Smirnoff Vodka"
number: 120
priceQuantity: 195
subtotal: 195
taxes: Array[0]

现在,从所有物品中,我必须计算每次总销售额的总和,以便我知道每件物品的总销售额。

即推送这些数组中的值

itemAmount=[];
itemName=[];

阵列将会非常大,因此我需要它同时非常高效。

此外,在计算总金额之前,我必须迭代税收数组,以便添加所有税金。什么是有效的方法呢?

3 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

var itemAmount = [], itemName = [];

myArray.map(function(obj){
  var total = obj.subtotal;
  for (var i = 0; i < obj.taxes.length; i++) {
      total += obj.taxes[i];
  }

  var index = itemName.indexOf(obj.name);
  if (index === -1) {
    itemAmount.push(total);
    itemName.push(obj.name);
  } else {
    itemAmount[index] += total;
  }
});

demo

答案 1 :(得分:0)

如果每次打开应用程序时都需要这些值,最好不要计算这些值,而是将它们存储在数据库中。 对于每次购买,只需使用当前价格调整totalSale值,并使用当前价格和增值税更新totalSaleVAT。

除了更容易之外,这样做也不会在价格变化时提供错误的数据。因为当价格上涨或下跌时,售出的价值不会受到影响。

答案 2 :(得分:0)

为什么你不使用像dinamic分配这样的javascript的好东西而不是那些坏的东西?

我会为产品设置一个对象:

var Products = {}

然后设置条目如:

if(!products[WHATEVER])
  products[WHATEVER] = [];

var temp = {};
temp.name = "asdf";
temp....

products[WHATEVER].push(temp);

所以你有一个产品对象,你只需要使用你想要的任何产品的id,name或任何产品,这是产品条目的数组。

试试吧