reduceは整列コンビネーションを実現します.

1341 ワード

以前には、組み合わせを配置する必要がありました.そして、このリンクを参照して、jsの高次関数reduceを用いて、不定長の二次元配列の順列結合問題を解決することが分かりました.
var data = {
  color: ['color1', 'color2', 'color3'],
  size: ['size1', 'size2', 'size3'],
  style: ['style1', 'style2', 'style3']
}

Object.values(data).reduce( (result, property) => {
    return property.reduce( (acc, value) => {
        return acc.concat(result.map( ele => [].concat(ele, value)));
    }, []);
});
//   
var data = {
            color: ['color1', 'color2', 'color3'],
            size: ['size1', 'size2', 'size3'],
            style: ['style1', 'style2', 'style3']
        }
//          
Object.keys(data).reduce( (result, key) => {

        //          
        return data[key].reduce( (acc, value) => {

            //        
            if (!result.length) {
                //           
                return acc.concat({ [key]: value });
            }

            //           ,              ,     。
            return acc.concat( result.map( ele => (Object.assign({}, ele, { [key]: value }) )));
        }, []);
    }, []);

//   
二重ループに相当します.
Object.values Object.keys Aray.prototype.reduceについて