当前位置: 首页 > 知识库问答 >
问题:

javascript - 如何生成笛卡尔积?

裴永年
2024-04-08

现在有这几个数据

let names = ["iPhone X", "iPhone XS"]let colors = ["黑色", "白色"]let storages = ["64g", "256g"]

要转换成

[    {        "spec": [            {                "name": "iPhone X"            },            {                "name": "黑色"            },            {                "name": "64g"            }        ]    },    {        "spec": [            {                "name": "iPhone X"            },            {                "name": "黑色"            },            {                "name": "256g"            }        ]    },    {        "spec": [            {                "name": "iPhone X"            },            {                "name": "白色"            },            {                "name": "64g"            }        ]    },    {        "spec": [            {                "name": "iPhone X"            },            {                "name": "白色"            },            {                "name": "256g"            }        ]    },    {        "spec": [            {                "name": "iPhone XS"            },            {                "name": "黑色"            },            {                "name": "64g"            }        ]    },    {        "spec": [            {                "name": "iPhone XS"            },            {                "name": "黑色"            },            {                "name": "256g"            }        ]    },    {        "spec": [            {                "name": "iPhone XS"            },            {                "name": "白色"            },            {                "name": "64g"            }        ]    },    {        "spec": [            {                "name": "iPhone XS"            },            {                "name": "白色"            },            {                "name": "256g"            }        ]    }]

共有2个答案

景翰音
2024-04-08
let names = ["iPhone X", "iPhone XS"];let colors = ["黑色", "白色"];let storages = ["64g", "256g"];const r1 = names.map(name => ({ name }));const r2 = r1.flatMap(it => colors.map(name => [{ ...it }, { name }]));const r3 = r2.flatMap(it => storages.map(name => [...it, { name }]));const r = r3.map(spec => ({ spec }));console.dir(r, { depth: null });

snipaste_2024-04-08_18-04-58.png


补充了一个函数

function multiply(...arrayList) {    return arrayList        .reduce(            (r, arr) => r.flatMap(it => arr.map(name => [...it, { name }])),            [[]]        )        .map(spec => ({ spec }));}console.dir(multiply(names, colors, storages), { depth: null });

snipaste_2024-04-08_18-44-18.png

鞠征
2024-04-08

要生成笛卡尔积,你可以使用嵌套循环来遍历每个数组的元素,并构建所需的输出数组。下面是一个使用 JavaScript 实现的示例代码:

let names = ["iPhone X", "iPhone XS"];let colors = ["黑色", "白色"];let storages = ["64g", "256g"];let result = [];// 遍历names数组for (let i = 0; i < names.length; i++) {  // 遍历colors数组  for (let j = 0; j < colors.length; j++) {    // 遍历storages数组    for (let k = 0; k < storages.length; k++) {      // 构建笛卡尔积的每一项      let spec = [        { name: names[i] },        { name: colors[j] },        { name: storages[k] }      ];      // 将spec添加到结果数组中      result.push({ spec: spec });    }  }}console.log(result);

运行上述代码后,result 变量将包含你期望的输出数组。

在这个示例中,我们使用三个嵌套的 for 循环来遍历 namescolorsstorages 数组。在每个循环中,我们构建了一个 spec 数组,其中包含了当前迭代的元素,并将 spec 添加到结果数组中。最终,结果数组将包含所有可能的笛卡尔积组合。

 类似资料:
  • 我正在尝试对一个后端服务器进行负载测试,并将一些配置解析到一个标签对象中。我正在尝试生成< code>Label对象的笛卡尔乘积,这将是一个< code>Metric对象。 我有一个 方法添加 我试图以迭代/递归的方式做到这一点,但它变得非常复杂和混乱。我检查了是否有java8替代方案。如果我能够获得

  • 问题内容: 我试图解决中提到的问题这篇文章。考虑一个非负整数列表。我想要一套的笛卡尔积。例如,如果我可以使用itertools: 如果您能帮助我知道如何生成任意长度的using ,我将不胜感激。 问题答案: 您可以使用映射的所有项目来,然后解开他们:

  • 我有以下收藏类型: 我希望根据集合中每个键的单个值为每个创建唯一的组合。

  • 问题内容: 您将如何在JavaScript中实现多个数组的笛卡尔积? 举个例子, 应该回来 问题答案: 这是使用和提供的解决问题的功能解决方案(没有任何 可变变量 !),该提供者为:

  • 本文向大家介绍javascript笛卡尔积算法实现方法,包括了javascript笛卡尔积算法实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript笛卡尔积算法实现方法。分享给大家供大家参考。具体分析如下: 这里可根据给的对象或者数组生成笛卡尔积 希望本文所述对大家的javascript程序设计有所帮助。

  • 主要内容:Oracle CROSS JOIN子句简介,Oracle Cross Join示例在本教程中,您将学习如何使用Oracle 创建连接表的笛卡尔积。 Oracle CROSS JOIN子句简介 在数学中,给定两个集合和,的笛卡尔乘积是所有有序对(,)的集合,属于,属于。 要在Oracle中创建表的笛卡尔乘积,可以使用子句。 以下说明了子句的语法: 与其他连接(如或)不同,没有连接谓词的子句。 当执行两个没有关系的表的交叉连接时,将得到两个表的行和列的笛卡尔乘积。 当您想要生成大量