我正在使用Ember Data获取购物车的一些商品。这些项目看起来像这样
[
{
"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相同,并且可能会有多次其他同一商品的购买,我想做同样的事情到。
基本上我需要获取具有相同ID的所有项目,获取其item_amt
属性的总和,然后将它们组合在一起,只显示一个项目总数。
我在这个问题上有点失落,关于从哪里开始以及在何处开始。目前这个返回来自模型钩子中的路径,所以我知道在实际设置模型之前我可以做任何我需要的处理。但是我想确保原始项目保持原样(因为我需要知道独特的raffle_purchase_id
),以便以后用户为此付费。
答案 0 :(得分:1)
您是否可以使用 $finalFile = "";
/** Load $inputFileName to a PHPExcel Object **/
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet)
{
$worksheet->insertNewColumnBefore('A', 1); //To insert a single new column before column A:
foreach($worksheet->getRowIterator() as $row)
{
$worksheet->setCellValue('A'.$row, 'AFS-' . $worksheet->getCell("B".$row)->getValue());
}
}
$convertedFileName = "converted-file". $date->getTimestamp().".xlsx";
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save($directory . $convertedFileName);
循环遍历数组并将与所有硬编码参数相同的for
的所有项添加到另一个数组中,然后遍历新数组并找到通过将该值添加到变量purchase_id
?
item_amt
的总和
答案 1 :(得分:1)
你可以循环它们并将总和放在一个地图中,由它们的item_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);
}
Working CodePen查看控制台以查看地图的值
答案 2 :(得分:1)
您可以使用Array.prototype.reduce()
并收集对象中的所有总和:
var data = [{ "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" }, ],
sum = data.reduce(function (r, a) {
r[a.item_id] = (r[a.item_id] || 0) + +a.item_amt;
return r;
}, {});
document.write('<pre>' + JSON.stringify(sum, 0, 4) + '</pre>');
答案 3 :(得分:1)
您可以使用地图缩小或变得聪明,但这样的事情很简单并且似乎有效:
var processed = {};
items.forEach(function(item) {
if(!processed.item_id) {
processed.item_id = {
item_id: item.item_id,
item_amt: 0
}
}
processed.item_id.item_amt += parseInt(item.item_amt);
});