如何生成笛卡尔积?-灵析社区

我只爱钱

现在有这几个数据 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" } ] } ]

阅读量:146

点赞量:0

问AI
let names = ["iPhone X", "iPhone XS"] let colors = ["黑色", "白色"] let storages = ["64g", "256g"] let combine = function (...chunks) { let res = [] let helper = function (chunkIndex, prev) { let chunk = chunks[chunkIndex] let isLast = chunkIndex === chunks.length - 1 for (let val of chunk) { let cur = prev.concat({name: val}) if (isLast) { // 如果已经处理到数组的最后一项了 则把拼接的结果放入返回值中 res.push({spec: cur}) } else { helper(chunkIndex + 1, cur) } } } // 从属性数组下标为 0 开始处理 // 并且此时的 prev 是个空数组 helper(0, []) return res } console.log(combine(names, colors, storages))