SOURCE

// 生成SKU
// 已知规格数据
let msg = 'hello'
// arr 实际数据中可能横向纵向扩展或者减少
let arr = [
    ["red", "yellow"],
    ["XL", "S"],
    ['a1', 'a2'],
    ['b1', 'b2'],
];
/**
输出结果:
hello-red-XL-a1-b1;
hello-red-XL-a1-b2;
hello-red-XL-a2-b1;
hello-red-XL-a2-b2;
hello-red-S-a1-b1;
hello-red-S-a1-b2;
hello-red-S-a2-b1;
hello-red-S-a2-b2;
hello-yellow-XL-a1-b1;
hello-yellow-XL-a1-b2;
hello-yellow-XL-a2-b1;
hello-yellow-XL-a2-b2;
hello-yellow-S-a1-b1;
hello-yellow-S-a1-b2;
hello-yellow-S-a2-b1;
hello-yellow-S-a2-b2;
....
*/
// 请完善如下createSKU函数及注释信息以符合输出结果;
/**
 * @param
 * @return
 */

function createSKU(arrs, k) {
    function a(ars) {
        /**
         * 语法
        arr.reduce(callback[accumulator, currentValue, currentIndex, array], initialValue)
        参数
        callback
        用于处理框架中每个元素的函式,可加入四个参数:
        accumulator
        累加器initialValue是上一次呼叫后,所回传的累加数值。
        currentValue
        原机架当前所产生的处理中的元素。
        currentIndex选择性
        如果有预期initialValue,则由索引0之元素开始,若无则自索引1之元素开始。
        array选择性
        呼叫reduce()方法的阵列。
        initialValue选择性
        第于一次呼叫callback时要传入的累加器初始值。若没有提供初始值,则原阵列的第一个元素将会被当作初始的累加器。于假如空一个阵列呼叫reduce()方法御姐没有提供累加器初始值,将会发生错误。
        回传值
        简化后的结果值。
        */
        return ars.reduce(function (a, b) {
            var ret = [];
            a.forEach(function (a) {
                b.forEach(function (b) {
                    ret.push(a.concat([b]));
                    console.log(ret)
                });
            });
            return ret;
        }, [[k]]);
    }
    return a(arrs)
}

let allArr = createSKU(arr, msg)
allArr.forEach((item, i) => {
    console.log(item.toString().replace(/,/g, '-'))
})
// console.log(allArr)
console 命令行工具 X clear

                    
>
console