Javascript 按键组合数组中的项

Javascript 按键组合数组中的项,javascript,arrays,ember.js,Javascript,Arrays,Ember.js,我正在使用余烬数据为购物车获取一些物品。这些项目可能看起来像这样 [ { "item_id":"5635", "raffle_purchase_id":"1060", "item_name":"***", "item_desc":"***", "item_image":"5635-Ilbt8xNGsD-cropped.png", "item_amt":"2", "item_type":"raffle" }, { "ite

我正在使用余烬数据为购物车获取一些物品。这些项目可能看起来像这样

[
  {
    "item_id":"5635",
    "raffle_purchase_id":"1060",
    "item_name":"***",
    "item_desc":"***",
    "item_image":"5635-Ilbt8xNGsD-cropped.png",
    "item_amt":"2",
    "item_type":"raffle"
  },
  {
    "item_id":"5635",
    "raffle_purchase_id":"1061",
    "item_name":"***",
    "item_desc":"***",
    "item_image":"5635-Ilbt8xNGsD-cropped.png",
    "item_amt":"4",
    "item_type":"raffle"
  },
  {
    "item_id":"5635",
    "raffle_purchase_id":"1563",
    "item_name":"***",
    "item_desc":"***",
    "item_image":"5635-Ilbt8xNGsD-cropped.png",
    "item_amt":"2",
    "item_type":"raffle"
  },
  ...
]
这里的每个项目都有一个不同的购买ID,我需要在服务器端更新该ID,因此我需要将所有要更新的项目发回服务器。然而,当我显示这些时,我不想一遍又一遍地显示同一购买的每一行。相反,我想把它们结合起来,计算出这些购买的总成本

每个项目都有一个项目ID,在本例中,这3个(可能更多)项目的ID是相同的,并且我可能会多次购买同一项目的少数其他物品,我想做相同的事情

基本上,我需要在这里获得所有具有相同ID的项目,获得它们的
item\u amt
属性的总和,然后将它们组合起来,只显示一个行项目和总数


我对这一点有点迷茫,不知从哪里开始,从哪里开始。目前,该返回来自模型挂钩中的路由,因此我知道在实际设置模型之前,我可以进行任何需要的处理。但是,我想确保原始物品完好无损(因为我需要知道唯一的
raffle\u purchase\u id
)用于以后用户付款时。

您是否可以使用
for
循环遍历该数组,并将具有相同
购买id的所有项目作为某个硬编码参数添加到另一个数组中,然后在新数组中循环,通过将该值添加到变量
sum
,找到每个数组的
item\u amt
之和?

您是否可以使用
for
循环遍历数组,并将所有具有与某个硬编码参数相同的
采购id
的项目添加到另一个数组中,然后在新数组中循环,通过将该值添加到变量
sum

中,找到每个数组的
item\u amt
之和。您可以对它们进行循环,并将其放入映射图中,映射到它们的item\u id:

var returnedJSON = [
{
    "item_id":"5635",
    "raffle_purchase_id":"1060",
    "item_name":"***",
    "item_desc":"***",
    "item_image":"5635-Ilbt8xNGsD-cropped.png",
    "item_amt":"2",
    "item_type":"raffle"
  },
  {
    "item_id":"5635",
    "raffle_purchase_id":"1061",
    "item_name":"***",
    "item_desc":"***",
    "item_image":"5635-Ilbt8xNGsD-cropped.png",
    "item_amt":"4",
    "item_type":"raffle"
  },
  {
    "item_id":"5635",
    "raffle_purchase_id":"1563",
    "item_name":"***",
    "item_desc":"***",
    "item_image":"5635-Ilbt8xNGsD-cropped.png",
    "item_amt":"2",
    "item_type":"raffle"
  }
];
var itemTotals = {};
for(var i = 0; i < returnedJSON.length; i++) {
  if(!itemTotals[returnedJSON[i].item_id]) {
   itemTotals[returnedJSON[i].item_id] = 0;
  }
  itemTotals[returnedJSON[i].item_id] += Number(returnedJSON[i].item_amt);
}
var returnedJSON=[
{
“项目id”:“5635”,
“抽奖购买id”:“1060”,
“项目名称”:“***”,
“项目描述”:“***”,
“项目图片”:“5635-Ilbt8xNGsD-CROPED.png”,
“项目金额”:“2”,
“项目类型”:“抽奖”
},
{
“项目id”:“5635”,
“抽奖购买id”:“1061”,
“项目名称”:“***”,
“项目描述”:“***”,
“项目图片”:“5635-Ilbt8xNGsD-CROPED.png”,
“项目金额”:“4”,
“项目类型”:“抽奖”
},
{
“项目id”:“5635”,
“抽奖购买id”:“1563”,
“项目名称”:“***”,
“项目描述”:“***”,
“项目图片”:“5635-Ilbt8xNGsD-CROPED.png”,
“项目金额”:“2”,
“项目类型”:“抽奖”
}
];
var itemTotals={};
for(var i=0;i

查看控制台以查看map的值

您可以在它们上面循环,并将总和放入一个map中,由它们的项目id映射:

var returnedJSON = [
{
    "item_id":"5635",
    "raffle_purchase_id":"1060",
    "item_name":"***",
    "item_desc":"***",
    "item_image":"5635-Ilbt8xNGsD-cropped.png",
    "item_amt":"2",
    "item_type":"raffle"
  },
  {
    "item_id":"5635",
    "raffle_purchase_id":"1061",
    "item_name":"***",
    "item_desc":"***",
    "item_image":"5635-Ilbt8xNGsD-cropped.png",
    "item_amt":"4",
    "item_type":"raffle"
  },
  {
    "item_id":"5635",
    "raffle_purchase_id":"1563",
    "item_name":"***",
    "item_desc":"***",
    "item_image":"5635-Ilbt8xNGsD-cropped.png",
    "item_amt":"2",
    "item_type":"raffle"
  }
];
var itemTotals = {};
for(var i = 0; i < returnedJSON.length; i++) {
  if(!itemTotals[returnedJSON[i].item_id]) {
   itemTotals[returnedJSON[i].item_id] = 0;
  }
  itemTotals[returnedJSON[i].item_id] += Number(returnedJSON[i].item_amt);
}
var returnedJSON=[
{
“项目id”:“5635”,
“抽奖购买id”:“1060”,
“项目名称”:“***”,
“项目描述”:“***”,
“项目图片”:“5635-Ilbt8xNGsD-CROPED.png”,
“项目金额”:“2”,
“项目类型”:“抽奖”
},
{
“项目id”:“5635”,
“抽奖购买id”:“1061”,
“项目名称”:“***”,
“项目描述”:“***”,
“项目图片”:“5635-Ilbt8xNGsD-CROPED.png”,
“项目金额”:“4”,
“项目类型”:“抽奖”
},
{
“项目id”:“5635”,
“抽奖购买id”:“1563”,
“项目名称”:“***”,
“项目描述”:“***”,
“项目图片”:“5635-Ilbt8xNGsD-CROPED.png”,
“项目金额”:“2”,
“项目类型”:“抽奖”
}
];
var itemTotals={};
for(var i=0;i
查看控制台以查看map的值,您可以使用并收集对象中的所有总和:

var data=[{“item_id”:“5635”,“raffle_purchase_id”:“1060”,“item_name”:“***”,“item_desc”:“5635-Ilbt8xNGsD-croped.png”,“item_amt”:“2”,“item_type”:“raffle”},“item_id”:“5635”,“raffle_purchase_id”:“1061”,“item_name”:“***”,“item_desc,“项目类型”:“抽奖”},{“项目id”:“5635”,“抽奖采购id”:“1563”,“项目名称”:“***”,“项目描述”:“***”,“项目图像”:“5635-Ilbt8xNGsD-CROPED.png”,“项目金额”:“2”,“项目类型”:“抽奖”},],
总和=数据。减少(函数(r,a){
r[a.item_id]=(r[a.item_id]| 0)++a.item_金额;
返回r;
}, {});
document.write(''+JSON.stringify(sum,0,4)+'');
您可以使用和收集对象中的所有和:

var data=[{“item_id”:“5635”,“raffle_purchase_id”:“1060”,“item_name”:“***”,“item_desc”:“5635-Ilbt8xNGsD-croped.png”,“item_amt”:“2”,“item_type”:“raffle”},“item_id”:“5635”,“raffle_purchase_id”:“1061”,“item_name”:“***”,“item_desc项目类型“:”抽奖“},{”项目id“:”5635“,”抽奖采购id“:”1563“,”项目名称“***”,“项目描述“,”项目图像“:”5635-Ilbt8xNGsD-CROPED.png“,”项目金额“:”2“,”项目类型“:”抽奖“},],
总和=数据。减少(函数(r,a){
r[a.item_id]=(r[a.item_id]| 0)++a.item_金额;
返回r;
}, {});

document.write(''+JSON.stringify(sum,0,4)+'');
您可以使用map reduce或get Smart,但类似的方法非常简单,而且似乎有效:


您可以使用map reduce或get Smart,但类似的方法非常简单,而且似乎很有效:


这是我到目前为止的第一个想法,看起来很混乱,但现在它可能不得不这样做,我想可能有一个更方便的方法,但可能没有。这是我到目前为止的第一个想法,看起来很混乱,但现在它是