/*
需求描述起来很简单,有这样三个数组:
let names = ["iPhone X", "iPhone XS"]
let colors = ["黑色", "白色"]
let storages = ["64g", "256g"]
需要把他们的所有组合穷举出来,最终得到这样一个数组:
[
["iPhone X", "黑色", "64g"],
["iPhone X", "黑色", "256g"],
["iPhone X", "白色", "64g"],
["iPhone X", "白色", "256g"],
["iPhone XS", "黑色", "64g"],
["iPhone XS", "黑色", "256g"],
["iPhone XS", "白色", "64g"],
["iPhone XS", "白色", "256g"],
]
由于这些属性数组是不定项的,所以不能简单的用三重的暴力循环来求解了。
*/
let names = ["iPhone X", "iPhone XS"]
let colors = ["黑色", "白色"]
let storages = ["64g", "256g"]
// list的每一项和arr的每一项组合新的所有的情况,返回res
function getRes(list, arr) {
let res = []
list.forEach(i => {
arr.forEach(j => {
let curj = JSON.parse(JSON.stringify(j))
curj.push(i)
res.push(curj)
})
})
return res
}
// [ [ 'iPhone X', 'iPhone XS' ], [ '黑色', '白色' ], [ '64g', '256g' ] ]
function get(...arr) {
if (!Array.isArray(arr) || !arr.length) return '参数有误'
let res = arr.shift() // 取第一个作为初始值,剩下的遍历
res = res.map(i => [i])
if (arr.length) {
let cloneRes = JSON.parse(JSON.stringify(res)) // 这里深拷贝,有lodash的尽量使用deepClone
arr.forEach(list => {
cloneRes = getRes(list, cloneRes) // 递归轮循
})
res = cloneRes
}
return res
}
console.log(get(names, colors, storages))
笔记:三个数组,把他们的所有组合穷举出来,最终得到这样一个数组
最新推荐文章于 2024-02-26 21:35:22 发布