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

有大佬遇到过这个问题吗:如何操作此数组,得到如下的笛卡尔积?求高效方法求大佬指点!

有大佬遇到过这个问题吗:如何操作此数组,得到如下的笛卡尔积?求高效方法求大佬指点!

潇湘沐 2019-08-21 13:16:23
//数组长度不固定constspec=[{label:'颜色',content:['红色','黑色','蓝色']},{label:'产地',content:['杭州','贵州','商州']},{label:'尺寸',content:['大号','中号','小号']}];//操作spec得到如下datas,spec0,spec1,spec2是动态对应spec数组的顺序,总共生成27个对象constdatas=[{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 回答

?
MYYA

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

In[1]:importitertools
In[2]:list(itertools.product(['红色','黑色','蓝色'],['杭州','贵州','商州'],['大号','中号','小号']))
Out[2]:
[('红色','杭州','大号'),
('红色','杭州','中号'),
('红色','杭州','小号'),
('红色','贵州','大号'),
('红色','贵州','中号'),
('红色','贵州','小号'),
('红色','商州','大号'),
('红色','商州','中号'),
('红色','商州','小号'),
('黑色','杭州','大号'),
('黑色','杭州','中号'),
('黑色','杭州','小号'),
('黑色','贵州','大号'),
('黑色','贵州','中号'),
('黑色','贵州','小号'),
('黑色','商州','大号'),
('黑色','商州','中号'),
('黑色','商州','小号'),
('蓝色','杭州','大号'),
('蓝色','杭州','中号'),
('蓝色','杭州','小号'),
('蓝色','贵州','大号'),
('蓝色','贵州','中号'),
('蓝色','贵州','小号'),
('蓝色','商州','大号'),
('蓝色','商州','中号'),
('蓝色','商州','小号')]
                            
查看完整回答
反对 回复 2019-08-21
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

参考pythonitertools.product的实现
functionproduct(pools){
result=[[]]
pools.forEach(pool=>{
//python中一行result=[x+[y]forxinresultforyinpool]
r1=[]
result.forEach(x=>{
pool.forEach(y=>{
r1.push(x.concat(y))
})
})
result=r1
})
returnresult
}
datas=product(spec.map(o=>o.content)).map(o=>{return{"spec0":o[0],"spec1":o[1],"spec2":o[2]}})
console.log(datas)
                            
查看完整回答
反对 回复 2019-08-21
  • 2 回答
  • 0 关注
  • 278 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号