如何实现数组的笛卡尔积

问题背景: 开发中遇到这种需求,一个数组中是如下格式的对象,能不能根据 sidePos 的不同做笛卡尔积运算拿到如下的两两不同的 sidePos 字段的字符串。 test 字段没有任何含义,仅表示字段名

let arr = [
    {sidePos: "百", val: 0, …},
    {sidePos: "十", val: 1, …},
    {sidePos: "百", val: 2, …},
    {sidePos: "百", val: 3, …},
    {sidePos: "十", val: 4, …}
    ...
]

现在不知道怎么能给这个数组求笛卡尔积,拿到这样的字段

item.value = `{"test": {"sidePos": '百', "val": 0}, {"sidePos": '十', "val": 1}}`
item.value = `{"test": {"sidePos": '百', "val": 0}, {"sidePos": '十', "val": 4}}`
item.value = `{"test": {"sidePos": '百', "val": 2}, {"sidePos": '十', "val": 1}}`
item.value = `{"test": {"sidePos": '百', "val": 2}, {"sidePos": '十', "val": 4}}`
item.value = `{"test": {"sidePos": '百', "val": 3}, {"sidePos": '十', "val": 1}}`
item.value = `{"test": {"sidePos": '百', "val": 3}, {"sidePos": '十', "val": 4}}`

新手求指教~

阅读 3.3k
2 个回答
  1. 把“百”放到一个数组中,“十”放到另一个数组中
  2. 两层循环组合成n*m个元素的结果数组

伪代码:

for each i in 百
    for each j in 十
        result.push(i + j)

另一种实现方式:

  1. 两层循环,内层循环中判断两个元素是否相同,不相同则组合,相同则略过

伪代码:

for each i in arr
    for each j in arr
        if (i.sidePos != j.sidePos)
            result.push(i + j)

没看懂你这是什么

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题