合并两个对象数组以获得所有可能的结果

时间:2019-08-15 15:08:02

标签: javascript typescript ecmascript-6 ecmascript-7

我有两个对象数组:

    const osCapabilities = [{
      os: 'Windows',
      os_version: '10',
    }, {
      os: 'OS X',
      os_version: 'Mojave',
    }];

    const browserCapabilities = [{
      browser: 'chrome'
    }, {
      browser: 'firefox'
    }, {
      browser: 'internet explorer'
    }, {
      browser: 'safari'
    }];

我正在尝试找出组合它们的最佳方法,以便获得以下内容。

    const capabilities = [{
      browser: 'chrome',
      os: 'Windows',
      os_version: '10',
    }, {
      browser: 'chrome',
      os: 'OS X',
      os_version: 'Mojave',
    }, {
      browser: 'firefox',
      os: 'Windows',
      os_version: '10',
    }, {
      browser: 'firefox',
      os: 'OS X',
      os_version: 'Mojave',
    } ...
    ]

我无法解决这个问题。任何帮助是极大的赞赏。谢谢!v

1 个答案:

答案 0 :(得分:1)

您可以使用<#span class="icon icon-edit"><#/span>Array.prototype.flatMap()

Array.prototype.map

首先,您要映射var merged = browserCapabilities.flatMap(browser => { return osCapabilities.map(os => { return {...browser, ...os} }) }) 。在map函数中,您还可以映射browserCapabilities并返回每个浏览器具有os信息的对象数组。

您可以通过将浏览器对象和os对象分散到新对象中来组合它们。参见spread syntax

然后,如果仅使用osCapabilities,则flatMap将展平二维数组,并将其展平为一维数组。