javascript - 在 JavaScript 中合并嵌套的对象数组

标签 javascript arrays

我有一个对象数组,其中包含一个嵌套的对象数组,例如:

var cars = [
  {
    Plate: '112211',
    Details:
      [
        {
          Desc: 'Blah11 Blah Blah',
        Miles: '111',
        Color: 'blue'
        },
        {
          Desc: 'Blah B22lah Blah',
        Miles: '222',
        Color: 'green'
        },
      ],
      Make:'Honda'
  },
      Plate: '223322',
    Details:
      [
        {
          Desc: 'Blah Blah B33lah',
        Miles: '333',
        Color: 'yellow'
        },
        {
          Desc: 'Blah B44lah Blah',
        Miles: '444',
        Color: 'red'
        }
      ],
      Make:'GMC'
  },
      Plate: '334433',
    Details:
      [
        {
          Desc: 'Bl55ah Blah Blah',
        Miles: '555',
        Color: 'blue'
        },
        {
          Desc: 'Blah B66lah Blah',
        Miles: '666',
        Color: 'pink'
        },
      ],
      Make:'Ford'
  }
]

我正在尝试找到一种方法将其转换为一个新数组,以展平或合并嵌套数组。我们的目标是:

[
  {
    Plate: '112211',
    Desc: 'Blah11 Blah Blah',
    Miles: '111',
    Color: 'blue',
    Make:'Honda'
  },
  {
    Plate: '112211',
    Desc: 'Blah B22lah Blah',
    Miles: '222',
    Color: 'green',
    Make: 'Honda'
    },
    {
    Plate: '223322',
    Desc: 'Blah Blah B333lah',
    Miles: '333',
    Color: 'yellow'
    Make: 'GMC'
    },
    {
    Plate: '223322',
    Desc: 'Blah Bl444ah B33lah',
    Miles: '444',
    Color: 'red',
    Make: 'GMC'
    },
    {
    Plate: '334433',
    Desc: 'Bl555ah Blah B33lah',
    Miles: '555',
    Color: 'blue',
    Make: 'Ford'
    },
    {
    Plate: '334433',
    Desc: 'Blah Bl666ah B33lah',
    Miles: '666',
    Color: 'pink',
    Make: 'Ford'
    },
]

lodash _.flatten 和 _.flattenDeep 没有做任何事情。我还尝试过执行 _.chain 并展平来构建新数组,但结果是空的

var actions = _.chain(cars).flatten("Details");

        for (i = 0; i < cars.length; i++) {
            actions.each(function(action) {
                list.push(cars[i].Plate);
                list.push(action);
                list.push(cars[i].Make);

最佳答案

这是代码

function merge(collection) {
  return _(collection).map(function(obj) {
      return _(obj)
        .pickBy(_.isArray)
        .values()
        .flatten()
        .map(function(dest) {
          return _.merge(dest, _.omitBy(obj, _.isArray));
        })
        .value();
    })
    .flatten()
    .value();
}

var cars = [{
  Plate: '112211',
  Details: [{
    Desc: 'Blah11 Blah Blah',
    Miles: '111',
    Color: 'blue'
  }, {
    Desc: 'Blah B22lah Blah',
    Miles: '222',
    Color: 'green'
  }],
  Make: 'Honda'
}, {
  Plate: '223322',
  Details: [{
    Desc: 'Blah Blah B33lah',
    Miles: '333',
    Color: 'yellow'
  }, {
    Desc: 'Blah B44lah Blah',
    Miles: '444',
    Color: 'red'
  }],
  Make: 'GMC'
}, {
  Plate: '334433',
  Details: [{
    Desc: 'Bl55ah Blah Blah',
    Miles: '555',
    Color: 'blue'
  }, {
    Desc: 'Blah B66lah Blah',
    Miles: '666',
    Color: 'pink'
  }],
  Make: 'Ford'
}];

var result = merge(cars);
document.querySelector('#result').innerHTML = JSON.stringify(result, null, 2);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.5.1/lodash.min.js"></script>
<pre id="result"></pre>

关于javascript - 在 JavaScript 中合并嵌套的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35593045/

相关文章:

java - 如何将扫描仪控制台中的 6 个整数存储到一个集合中

php - 循环一个有间隙数字键的数组

javascript - 如何从 View Backbone 传回模型属性

javascript - 使用 javascript 提交动态创建的表单

javascript - 如何正确编写异步加载函数的代码

javascript - 单击鼠标移动一组 SVG 元素

arrays - Z3 中的 SMTLIB 阵列理论奇怪

java - 为什么我的数组搜索在搜索循环超过 2000 次后花费了 0 纳秒?

c - 字符串数组正确扫描,然后一起运行

javascript - 获取输入值并将其保存到数组