常用於電商類項目(超淺顯層面)
例如一種商品有三種規格:顏色,尺寸,種類
顏色又分為:[紅,黃,藍]
尺寸:[A,B]
種類:[1,2,3]
可以結合為多種排列
如:[‘紅’,A,1],[‘黃’,A,1],....等,可以用到sku排列算法:
摘抄的代碼,原地址給忘了,
let arr = [ [1, 2, 3], ['紅', '黃', '藍'], ['A', 'B'] ]; function cartesianProductOf() { return Array.prototype.reduce.call(arguments, (fristItem, secondItem) => { var ret = []; fristItem.forEach(function(fristItem) { secondItem.forEach(function(secondItem) { ret.push(fristItem.concat([secondItem])); }); }); return ret; }, [[]]); } let allArr =cartesianProductOf(...arr ) console.log(allArr)
返回結果:
1 (18) [Array(3), Array(3), Array(3), Array(3), Array(3), Array(3), Array(3), Array(3), Array(3), Array(3), Array(3), Array(3), Array(3), Array(3), Array(3), Array(3), Array(3), Array(3)] 2 0: (3) [1, "紅", "A"] 3 1: (3) [1, "紅", "B"] 4 2: (3) [1, "黃", "A"] 5 3: (3) [1, "黃", "B"] 6 4: (3) [1, "藍", "A"] 7 5: (3) [1, "藍", "B"] 8 6: (3) [2, "紅", "A"] 9 7: (3) [2, "紅", "B"] 10 8: (3) [2, "黃", "A"] 11 9: (3) [2, "黃", "B"] 12 10: (3) [2, "藍", "A"] 13 11: (3) [2, "藍", "B"] 14 12: (3) [3, "紅", "A"] 15 13: (3) [3, "紅", "B"] 16 14: (3) [3, "黃", "A"] 17 15: (3) [3, "黃", "B"] 18 16: (3) [3, "藍", "A"] 19 17: (3) [3, "藍", "B"] 20 length: 18 21 __proto__: Array(0)
也可以簡化一下:
1 <script type="text/javascript"> 2 let arr = [ 3 [1, 2, 3], 4 ['紅', '黃', '藍'], 5 ['A', 'B'] 6 ]; 7 fn = (a, b) => [].concat(...a.map(d => b.map(e => [].concat(d, e)))); 8 specification = (a, b, ...c) => (b ? specification(fn(a, b), ...c) : a) 9 let output = specification(...arr) 10 console.log(output) 11 </script>
結果和上面相同,記下來 慢慢學習規整