为了账号安全,请及时绑定邮箱和手机立即绑定

如何操作此数组,得到如下的笛卡尔积?求高效方法

如何操作此数组,得到如下的笛卡尔积?求高效方法

PHP
缥缈止盈 2019-03-01 11:28:26
//数组长度不固定const spec = [   { label: '颜色', content: ['红色', '黑色', '蓝色'] },   { label: '产地', content: ['杭州', '贵州', '商州'] },   { label: '尺寸', content: ['大号', '中号', '小号'] } ];//操作spec得到如下datas,spec0,spec1,spec2是动态对应spec数组的顺序,总共生成27个对象const datas = [   {    spec0: '红色',    spec1: '杭州',    spec2: '大号'   },   {    spec0: '红色',    spec1: '杭州',    spec2: '中号'   },   {    spec0: '红色',    spec1: '杭州',    spec2: '小号'   },   {    spec0: '红色',    spec1: '贵州',    spec2: '大号'   },   {    spec0: '红色',    spec1: '贵州',    spec2: '中号'   },   {    spec0: '红色',    spec1: '贵州',    spec2: '小号'   },   {    spec0: '红色',    spec1: '商州',    spec2: '大号'   },   {    spec0: '红色',    spec1: '商州',    spec2: '中号'   },   {    spec0: '红色',    spec1: '商州',    spec2: '小号'   }  //.....];
查看完整描述

2 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

In [1]: import itertools

In [2]: list(itertools.product(['红色', '黑色', '蓝色'], ['杭州', '贵州', '商州'], ['大号', '中号', '小号']))
Out[2]: 
[('红色', '杭州', '大号'),
 ('红色', '杭州', '中号'),
 ('红色', '杭州', '小号'),
 ('红色', '贵州', '大号'),
 ('红色', '贵州', '中号'),
 ('红色', '贵州', '小号'),
 ('红色', '商州', '大号'),
 ('红色', '商州', '中号'),
 ('红色', '商州', '小号'),
 ('黑色', '杭州', '大号'),
 ('黑色', '杭州', '中号'),
 ('黑色', '杭州', '小号'),
 ('黑色', '贵州', '大号'),
 ('黑色', '贵州', '中号'),
 ('黑色', '贵州', '小号'),
 ('黑色', '商州', '大号'),
 ('黑色', '商州', '中号'),
 ('黑色', '商州', '小号'),
 ('蓝色', '杭州', '大号'),
 ('蓝色', '杭州', '中号'),
 ('蓝色', '杭州', '小号'),
 ('蓝色', '贵州', '大号'),
 ('蓝色', '贵州', '中号'),
 ('蓝色', '贵州', '小号'),
 ('蓝色', '商州', '大号'),
 ('蓝色', '商州', '中号'),
 ('蓝色', '商州', '小号')]


查看完整回答
反对 回复 2019-03-24
?
MMTTMM

TA贡献1869条经验 获得超4个赞

参考python itertools.product的实现function product(pools) {
    result = [[]]
    pools.forEach(pool => {        // python中一行 result = [x+[y] for x in result for y in pool]
        r1 = []
        result.forEach(x => {
            pool.forEach(y => {
                r1.push(x.concat(y))
            })
        })
        result = r1
    })    return result   
}

datas = product(spec.map(o=>o.content)).map(o=>{return {"spec0": o[0], "spec1": o[1], "spec2": o[2]}})console.log(datas)


查看完整回答
反对 回复 2019-03-24
  • 2 回答
  • 0 关注
  • 464 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信