如何实现数组的笛卡尔积

问题背景: 开发中遇到这种需求,一个数组中是如下格式的对象,能不能根据 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}}`

新手求指教~


哈士奇WWW
浏览 480回答 1
1回答

暮色呼如

把“百”放到一个数组中,“十”放到另一个数组中两层循环组合成n*m个元素的结果数组伪代码:for each i in 百    for each j in 十        result.push(i + j)另一种实现方式:两层循环,内层循环中判断两个元素是否相同,不相同则组合,相同则略过伪代码:for each i in arr    for each j in arr        if (i.sidePos != j.sidePos)            result.push(i + j)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript