SOURCE

let arr = [
    ["red", "yellow"],
    ["XL", "S"],
    ['a1', 'a2'],
    ['b1', 'b2'],
];

function createSKU (as=[],ks=''){
    function cs(arrs){
        // reAllClass上一次累加的结果集[[...],[...]]
        // label 当前操作的值 [...]
        // 每一次的累计都会替换上一次的reAllClass
        return arrs.reduce((reAllClass,label)=>{
            let ret = []
            // 遍历上一次的操作结果[["HC", "red"], ["HC", "yellow"]]的每一项,与当前操作值label数组合并,组成新的数组
            console.log('上一次结果集:',reAllClass)
            console.log('本次值:',label)
            reAllClass.forEach((item,i)=>{
                // 第一层的二维数组每一项分别用当前操作的值label组成(concat)label.length长度的新的值
                // ["XL", "S"]
                label.forEach((itemc,c)=>{
                    // 例:假设这是上一次数据源[["HC", "red"], ["HC", "yellow"]] 
                    // 第一次
                    // ["HC", "red", "XL"]
                    // ["HC", "red", "S"]
                    // 第二次
                    // ["HC", "yellow", "XL"]
                    // ["HC", "yellow", "S"]
                    ret.push(item.concat(itemc))
                })
            })
            return ret
        },[[ks]])
    }

    return cs(as)
}

const skuValue = createSKU(arr,'HC')
console.log('------createSKU返回值--------')
console.log(skuValue)

console.log('------结果--------')
skuValue.forEach((item, i) => {
    console.log(item.toString().replace(/,/g, '-'))
})
console 命令行工具 X clear

                    
>
console