在根据商品属性计算SKU时,通常会对商品不同选项的不同属性进行笛卡儿积运算。
这是在NodeJs里的实现版本,目前用在生产环境。
1 function cartesian(elements) { 2 if (!Array.isArray(elements)) 3 throw new TypeError(); 4 var end = elements.length - 1, 5 result = []; 6 7 function addTo(curr, start) { 8 var first = elements[start], 9 last = (start === end); 10 for (var i = 0; i < first.length; ++i) { 11 var copy = curr.slice(); 12 copy.push(first[i]); 13 if (last) { 14 result.push(copy); 15 } else { 16 addTo(copy, start + 1); 17 } 18 } 19 } 20 21 if (elements.length) 22 addTo([], 0); 23 else 24 result.push([]); 25 return result; 26 }
运行demo: