提问
[['a', 'b'], ['c'], ['d', 'e']]
得到
['a,c,d', 'a,c,e', 'b,c,d', 'b,c,e']
[['aa', 'bb'], ['cc', 'dd', 'ee'], ['ff']]
得到
['aa,cc,ff', 'aa,dd,ff', 'aa, ee, ff', 'bb,cc,ff', 'bb,dd,ff', 'bb,ee,ff']
解答
var testArray = [['aa', 'bb'], ['cc', 'dd', 'ee'], ['ff']];
var rememberArray = [];
var resultArray = [];
/**
* 递归处理数据
* @param targetIndex testArray的下标
* @param str 当前已经拼好的前缀
*/
function recursionData(targetIndex, str) {
var currArray = testArray[targetIndex];
if (!rememberArray[targetIndex]) {
rememberArray[targetIndex] = 0;
}
var forIndex = rememberArray[targetIndex];
if (targetIndex === testArray.length - 1) {
for(var i = 0; i < currArray.length; i++) {
resultArray.push(str + "," + currArray[i]);
}
recursionData(targetIndex - 1, str.substring(0, str.lastIndexOf(",")));
} else if (forIndex > currArray.length - 1 && targetIndex !== 0) {
rememberArray[targetIndex] = 0;
recursionData(targetIndex - 1, targetIndex === 1 ? "" : str.substring(0, str.lastIndexOf(",")));
} else {
var newStr = (str ? ( str + ",") : "") + currArray[forIndex];
if (targetIndex === 0 && forIndex > currArray.length - 1) {
//结束
} else {
rememberArray[targetIndex] = rememberArray[targetIndex] + 1;
recursionData(targetIndex + 1, newStr);
}
}
}
//开始
recursionData(0, "");
console.log(resultArray);