Объединение объектов из одного массива в другой на основе сопоставления значений объектов

Как использовать jQuery для объединения следующих двух массивов child_array.cat_parent_id == parent_array.cat_id?

Parent_array:

[{
  "cat_name" : "Fruit",
  "cat_id" : 77
}, {
  "cat_name" : "Vegetables",
  "cat_id" : 221
}]

И child_array, который я хотел бы объединить в parent_array:

[{
  "cat_name" : "Bananas",
  "cat_id" : 79,
  "cat_parent_id" : 77
},{
  "cat_name" : "Apples",
  "cat_id" : 80,
  "cat_parent_id" : 77
}, {
  "cat_name" : "Carrots",
  "cat_id" : 222,
  "cat_parent_id" : 221
}]

Вот то, что я хотел бы, чтобы выход выглядел:

[{
  "cat_name" : "Fruit",
  "cat_id" : 77,
  "cat_children": [
     {
       "cat_name" : "Bananas",
       "cat_id" : 79
     },
     {
       "cat_name" : "Apples",
       "cat_id" : 80
     }
  ]
}, {
  "cat_name" : "Vegetables",
  "cat_id" : 221,
  "cat_children": [
     {
       "cat_name" : "Carrots",
       "cat_id" : 222
     }
  ]
}]

1 ответ

  1. Для этого не обязательно нужен jQuery… просто напишите несколько вложенных циклов и выполните некоторые проверки. Ваша структура JSON может быть значительно оптимизирована для достижения этого, но следующая функция достигнет этого так, как это:

    function merge(_parent,_children){
        var result = _parent;
      for(x in _children){
        var parentID = _children[x].cat_parent_id;
        for(y in _parent){
          if(_parent[y].cat_id == parentID){      
            if(!result[y].cat_children){
                result[y].cat_children = [];
            }
            result[y].cat_children.push(_children[x]);
          }
        }
      }
      return result;
    }