猿问

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

//数组长度不固定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: '小号'
  }  //.....];


qq_遁去的一_1
浏览 560回答 2
2回答

慕妹3242003

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

守着一只汪

参考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)
随时随地看视频慕课网APP

相关分类

Python
我要回答