const specs = [{ name: '顏色', values: ['紅色', '藍色', '綠色'] },{ name: '尺寸', values: ['S', 'M', 'L'] }
];function generateSKUs(specs) {return specs.reduce((acc, spec) => {const newAcc = [];for (const combination of acc) {for (const value of spec.values) {newAcc.push({ ...combination, [spec.name]: value });}}return newAcc;}, [{}]); // 初始值是一個空對象數組
}const skus = generateSKUs(specs);
console.log(skus);
輸出的值顯示
[{ 顏色: '紅色', 尺寸: 'S' },{ 顏色: '紅色', 尺寸: 'M' },{ 顏色: '紅色', 尺寸: 'L' },{ 顏色: '藍色', 尺寸: 'S' },{ 顏色: '藍色', 尺寸: 'M' },{ 顏色: '藍色', 尺寸: 'L' },{ 顏色: '綠色', 尺寸: 'S' },{ 顏色: '綠色', 尺寸: 'M' },{ 顏色: '綠色', 尺寸: 'L' }
]
參數說明
accumulator:累加器累積回調的返回值。
currentValue:當前處理的數組元素。
index(可選):當前處理的數組元素的索引。
array(可選):調用reduce()方法的數組本身。
initialValue(可選):作為第一次調用callback函數時accumulator參數的值。
-------------------------
acc, spec 上方這兩個參數就是這個意思acc累加器累積回調的返回值,第一次會返回空數據,也就是尾部定義的 [{ }]定義0或者其他就會返回其他,后面也會返回相同類型,記得一定要寫return就行spec 當前行數據 類似map 返回的