首先这篇文章得仔细看,上面是我出的第一版本多规格算法可以去看一下思路,最主要的思路还是来源于递归算法
算法版本升级
1.使用Reduce函数来对算法进行升级优化
首先了解一下reduce
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
原理还是一个递归,但是reduce更简单
1.1概述
let 结果 = 数组.reduct(累加器, 初始化值) //累加器 (累加结果, 当前值, 当前索引)=>{ return 处理结果//这里的处理结果会返回给下一次的累加结果 }
1.2累加和
// reduce 案例1:累加和 let arr = [1,2,3,4,5] let s = arr.reduce( (sum,current,index)=>{ return sum + current } , 0) console.info(s)
2.使用 reduce函数生成笛卡尔积
let arr = [ ['红色', '黑色', '白色'], ['16G', '32G'], ['移动版', '联通版'], ] let result = arr.reduce((a, b, c) => { var res = [] a.map(x => { b.map(y => { res.push([...x, y]) }) }) return res }, [[]]) console.log(result)
3.生成对象形式的笛卡尔积(这种形式常用与elementui)方便简单
let newArr = [{ name: 'color', data: ['红色', '黑色', '白色'], }, { name: 'size', data: ['16G', '32G'], }, { name: 'banben', data: ['移动版', '联通版'], } ] let newResult = newArr.reduce((a, b, c) => { let res=[] a.map(x=>{ b.data.map(y=>{ res.push({...x,[b.name]:y}) }) }) return res },[{}]) console.log(newResult)