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

Combine two arrays of objects to get all possible outcomes

我有两个对象数组:

    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

您可以使用 Array.prototype.mapArray.prototype.flatMap()

var merged = browserCapabilities.flatMap(browser => {
    return osCapabilities.map(os => {
        return {...browser, ...os}
    })
})

首先,您绘制出 browserCapabilities。在 map 函数中,您还映射了 osCapabilities 和 return 对象数组以及每个浏览器的 os 信息。

您将浏览器对象与 os 对象合并,方法是将它们分散到一个新对象中。参见 spread syntax

如果您只使用 .map(),flatMap 将展平本来是二维数组的内容,并将它们展平为一维数组。