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

//数组长度不固定
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:'小号'
}
//.....
];
潇湘沐
浏览 279回答 2
2回答

MYYA

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

素胚勾勒不出你

参考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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript