1var list = [['热', '冷', '冰'], ['大', '中', '小'], ['重辣', '微辣'], ['重麻', '微麻']]; 2 3// 输出所有维度的组合,如 [['热', '冷''], ['大', '中']] => 热+大,热+中,冷+大,冷+中 4 5function compose(list) { 6 console.log('hello world'); 7} 8 9compose(list);
参考答案:
本题是个 全组合
的问题。
在介绍实现思路前先介绍一下笛卡尔积(摘自百度百科):
笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X×Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
全组合的实现,可以借鉴笛卡尔积的求法,实现思路如下:
function combination (list) {
let result = []
if (!list.length) return result
for (let subList of list) {
if (!result.length) {
result = subList.map(item => [item])
} else {
let subResult = []
for (let r of result) {
let tailList = subList.map(item => [...r, item])
subResult.push(...tailList)
}
result = subResult
}
}
return result
}
1function combination(list) { 2 return list.reduce((result, subList) => { 3 return subList.reduce((subResult, item) => { 4 let tail = result.length ? result.map(l => [...l, item]) : [[item]] 5 return subResult.concat(tail) 6 }, []) 7 }, []) 8}
1function compose(list){ 2 var res = list.reduce( (result, property) => { 3 return property.reduce( (acc, value) => { 4 return acc.concat(result.map( ele => [].concat(ele, value))); 5 }, []); 6 }); 7 return res.map(arr=>arr.join('+')) 8}
最近更新时间:2022-04-05