Mardanjan / Blog

学习笔记(在issues里),一些小demo的源码在这里,demo在线地址会持续更新
1 stars 0 forks source link

算法:笛卡尔积算法 #24

Open Mardanjan opened 4 years ago

Mardanjan commented 4 years ago

用蛮力法暴力计算了一下,别人的代码太美太短,看了一会有点看不懂,自己写了一个

console.log(calcDescartes([[1,2,3],['a','b','c'], ['m','n']]));

+ 我自己的代码。虽然长一点但是很清晰

function decard (array) { if (array.length === 0) { return [] } else if (array.length === 1) { return array } else { for(var i = 0; i < array.length - 1; i++) { var newArray = [] // 两个元素排列组合后生成的数组 array[i].map(item1 => { array[i + 1].map(item2 => { var tempArray = [] // 临时数组,两个元素合到一起,最终会成为newArray的元素 if (Array.isArray(item1)) { // 两个元素的排列组合结果会代替第二个原 item1.map(itm => { // 这样的话第二个元素与第三个元素的排列组合就是 tempArray.push(itm) // 第一个元素和第二个元素的排列组合的结果和第三个元素的排列组合 }) } else { tempArray.push(item1) } tempArray.push(item2) // 第二个元素是新的,并不是数组 newArray.push(tempArray) }) }) array[i+1] = newArray } return array.pop() // 以此类推,最后一个元素会成为最终的排列组合结果 } } console.log(decard([[1,2],['a','b'],['c','d'],['!','$','#']])) console.log(decard([[1,2],['a','b'],['c','d'],['!','$','#']]).length)