如何合并多个JSON对象中的子项?

时间:2017-07-13 12:56:09

标签: javascript jquery json merge

我有以下JavaScript对象

[
  {
    "familyName": "Smith",
    "children": [
      {         "firstName": "John"       },
      {         "firstName": "Mike"       }
    ]
  },
  {
    "familyName": "Williams",
    "children": [
      {         "firstName": "Mark"       },
      {         "firstName": "Dave"       }
    ]
  },
  {
    "familyName": "Jones",
    "children": [
      {         "firstName": "Mary"       },
      {         "firstName": "Sue"        }
    ]
  }
]

我想创建一个包含所有孩子的数组,即

[
  {     "FirstName": "John"   },
  {     "FirstName": "Mike"   },
  {     "FirstName": "Mark"   },
  {     "FirstName": "Dave"   },
  {     "FirstName": "Mary"   },
  {     "FirstName": "Sue"    }
]

我正在使用jQuery。

我查看过描述合并或连接数组的帖子,但不是那些子数组的帖子:例如: Merge/flatten an array of arrays in JavaScript?

我相信我可以遍历各个家庭并添加子阵列,但怀疑有一个“单线”吗?

4 个答案:

答案 0 :(得分:4)

我在控制台中测试过:

//The families(duh)
const families = [
{
    "familyName": "Smith",
    "children": [
      {         "firstName": "John"       },
      {         "firstName": "Mike"       }
    ]
  },
  {
    "familyName": "Williams",
    "children": [
      {         "firstName": "Mark"       },
      {         "firstName": "Dave"       }
    ]
  },
  {
    "familyName": "Jones",
    "children": [
      {         "firstName": "Mary"       },
      {         "firstName": "Sue"        }
    ]
  }
]
//Just flatten the children:
var children = [].concat.apply([], families.map(family => family.children));
//Outputs
console.log(children);

答案 1 :(得分:2)

没有jQuery的解决方案是使用reduce从他们的家庭中提取孩子(听起来有点粗糙,对不起)。

families.reduce(function(list, family){ 
    return list.concat(family.children);
}, []);

答案 2 :(得分:0)

您可以使用$.map

执行此操作
var a =  [
  {
    "familyName": "Smith",
    "children": [
      {         "firstName": "John"       },
      {         "firstName": "Mike"       }
    ]
  },
  {
    "familyName": "Williams",
    "children": [
      {         "firstName": "Mark"       },
      {         "firstName": "Dave"       }
    ]
  },
  {
    "familyName": "Jones",
    "children": [
      {         "firstName": "Mary"       },
      {         "firstName": "Sue"        }
    ]
  }
]

console.log($.map(a, function(it){
    return it.children;
}));

// Or ES6
$.map(a, it => it.children);

结果:

[  
   {  
      "firstName":"John"
   },
   {  
      "firstName":"Mike"
   },
   {  
      "firstName":"Mark"
   },
   {  
      "firstName":"Dave"
   },
   {  
      "firstName":"Mary"
   },
   {  
      "firstName":"Sue"
   }
]

答案 3 :(得分:0)

尝试使用Array#forEach方法。然后使用新数组推送子对象

var families = [ { "familyName": "Smith", "children": [ { "firstName": "John" }, { "firstName": "Mike" } ] }, { "familyName": "Williams", "children": [ { "firstName": "Mark" }, { "firstName": "Dave" } ] }, { "familyName": "Jones", "children": [ { "firstName": "Mary" }, { "firstName": "Sue" } ] } ]
var children = [];
families.forEach(family => family.children.forEach(child => children.push(child)));
console.log(children);