常用在商品SKU上,用于展示每种属性的组合,如:

‘红黄蓝’与‘大小’,可组合为红大、红小、黄大、黄小、蓝大、蓝小。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function calcDescartes(array) {
// 长度小于2 return
if (array.length < 2) return array[0] || []
return [].reduce.call(array, function (col, set) {
// console.log('====', col, set)
// 仅第一次 col为传入参数的第一个元素、set为第二个元素;
// 之后的每一次 col为上一次处理的结果数组、set为传入参数的下一个元素
var res = []
// 以下是col与set的组合操作
col.forEach(function (c) {
set.forEach(function (s) {
var t = [].concat(Array.isArray(c) ? c : [c])
t.push(s)
res.push(t)
})
})
return res
})
}
console.log(calcDescartes([[1, 2, 3], ['a', 'b', 'c'], ['A', 'B']]))