群里的知识

提问

[['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);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容