Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JSON中对类似项进行分组_Javascript_Laravel - Fatal编程技术网

Javascript 在JSON中对类似项进行分组

Javascript 在JSON中对类似项进行分组,javascript,laravel,Javascript,Laravel,您好,我有一个以JSON形式返回的集合,如下所示: [ { "quantity": "1", "description": "VIP Ticket to Event" }, { "quantity": "1", "description": "VIP Ticket to Event" }, { "quantity": "1", "description": "VIP Ticket to Event" }, { "quantity": "1"

您好,我有一个以JSON形式返回的集合,如下所示:

[
 {
   "quantity": "1",
   "description": "VIP Ticket to Event"
 },
 {
   "quantity": "1",
   "description": "VIP Ticket to Event"
 },
 {
   "quantity": "1",
   "description": "VIP Ticket to Event"
 },
 {
   "quantity": "1",
   "description": "Regular Ticket to Event"
 },
 {
   "quantity": "1",
   "description": "Regular Ticket to Event"
 },
]
但是,我想将类似的项目组合在一起,因此最后我有以下几点:

[
 {
   "quantity": "3",
   "description": "VIP Tickets to Event"
 },
 {
   "quantity": "2",
   "description": "Regular Tickets to Event"
 }
]
这很不幸,但我不能改变数据库结构,所以我唯一能做的就是处理结果。进行这种分组的一种好的、有效的方法是什么


这被标记为laravel和javascript,因为我还需要将相同的解决方案应用到我的前端。

您可以使用
reduce
创建具有更新结构的新数组-按
说明分组

var grouped = arr.reduce(function(groups, current) {
    var found = false;
    for (var i = 0; i < groups.length; i++) {
        if (groups[i].description == current.description) {
            groups[i].quantity++;
            found = true;
        }
    }

    if (!found) {
        groups.push(current);
    }

    return groups;
}, []);
var group=arr.reduce(功能(组,当前){
var=false;
对于(变量i=0;i
这是一个带有临时对象的提案,用于引用具有相同描述的对象

var数组=[{“数量”:“1”,“说明”:“活动贵宾票”},{“数量”:“1”,“说明”:“活动贵宾票”},{“数量”:“1”,“说明”:“活动贵宾票”},{“数量”:“1”,“说明”:“活动贵宾票”},{“数量”:“1”,“说明”:“活动贵宾票”},],
分组=[];
array.forEach(函数(a){
如果(!此[a.说明]){
此[a.description]={description:a.description,数量:0};
push(这个[a.描述]);
}
此[a.说明].数量+=+a.数量;
}, {});
document.write(“”+JSON.stringify(分组,0,4)+“”)使用临时对象

var d=[{“数量”:“1”,“描述”:“活动贵宾票”},{“数量”:“1”,“描述”:“活动贵宾票”},{“数量”:“1”,“描述”:“活动贵宾票”},{“数量”:“1”,“描述”:“活动贵宾票”},{“数量”:“1”,“描述”:“活动贵宾票”};
var o={};
d、 forEach(e=>o[e.description]=o[e.description]++e.quantity | |+e.quantity);
var r=Object.keys(o.map)(e=>({quantity:o[e],description:e}));

write(“”+JSON.stringify(r,0,2)+“”)
一种不同类型的
reduce
,您不必为输入数组中的每个项目迭代组数组来检查是否存在

使用缩减值本身作为hashMap检查重复

最后使用
map
将简化后的对象转换为数组


检查工作箱。我把数量改成了数字。还将一些值更改为2,以表明其工作正常。

JSON是从?
var groupedItemsObj = items.reduce(function(previous, next){
  if(previous[next.description]){
      var updatedQuantity = previous[next.description].quantity +   next.quantity;  
      previous[next.description] = {quantity: updatedQuantity, description: next.description};
  }else{
      previous[next.description] = next;
  }
  return previous;
}, {});
var groupedItemsArray = Object.keys(groupedItemsObj).map(function(key){
    return groupedItemsObj[key];
});