javascript - 根据id按顺序合并两个数组

标签 javascript arrays merge

我有 2 个对象数组:

var parents = [
  { id: 77777, data: {}},
  { id: 88888, data: {}},
  { id: 99999, data: {}}
]


var children = [
  {
    belongTo: 77777,
    data: [
      { id: 111, data: {}},
      { id: 222, data: {}}
    ]},
  {
    belongTo: 99999,
    data: [
      { id: 333, data: {}}
    ]
  }
]

我想将 parent 和 child 合并到:

var all = [
  { id: 77777, data: {}},
  { id: 111, data: {}},
  { id: 222, data: {}},
  { id: 88888, data: {}},
  { id: 99999, data: {}},
  { id: 333, data: {}}
]

]

我一直在尝试将它们拆分或合并在一起,然后压平,但总是非常复杂。

实现合并的最简单方法是什么?

我的复杂方法(不起作用):

children.map(function(child) {
  var parentIndex = parents.map(function(x) {return x.id}).indexOf(child.id)

  parents.splice(parentIndex + 1, 0, child.data)
})

[].concat.apply([], parents)

最佳答案

你只需要一些嵌套循环就可以得到它: http://jsfiddle.net/hpfgqc4m/2/

var parents = [
  { 
    id: 77777,
    data: {}
  },
  { 
    id: 88888,
    data: {}
  },
  { 
    id: 99999,
    data: {}
  }
]


var children = [
  {
    belongTo: 77777,
    data: [{
      id: 111,
      data: {}
    },
    {
      id: 222,
      data: {}
    }]
  },
  {
    belongTo: 99999,
    data: [{
      id: 333,
      data: {}
    }]
  }
]
var all = [];
parents.forEach(function(e, k) {
    all.push(e);
    children.forEach(function(el, key) {
        if (el.belongTo == e.id) {
            el.data.forEach(function(element) {
                all.push(element);            
            });                
        }
    });
});
console.log(all);  

关于javascript - 根据id按顺序合并两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33607826/

相关文章:

javascript - 如何将滚动添加到 react-bootstrap Modal.Body

javascript - 不要在表格之间分页

c++ - 使用成员函数求解方程 C++

merge - Excel - 将多列合并为一列

R:组合两个不等长的矩阵/向量,根据相同的值匹配行

python - 有没有办法合并两个数据帧并只保留一定数量的出现次数?

javascript - Google自定义搜索在底部创建了一个巨大的空白区域

javascript - 使用layout.pack将标签放置在圆圈外而不重叠

python - X Y Z 数组数据到热图

arrays - 查找数组的长度和指针指向数组的长度