猿问

JavaScript ? 多个数组拼接生成不重复字符串【挑战最简代码】

已知objectA如何生成result

var objectA =
{
'A': [{ 'name': 'A1' }, { 'name': 'A2' }],
'B': [{ 'name': 'B1' }, { 'name': 'B2' }],
'C': [{ 'name': 'C1' }, { 'name': 'C2' }, { 'name': 'C3' }],
'D': [{ 'name': 'D1' }, { 'name': 'D2' }],
'E': [{ 'name': 'E1' }, { 'name': 'E2' }]
};

var result = [
'A1:B1:C1:D1:E1',
'A1:B1:C1:D1:E2',
'A1:B1:C1:D2:E1',
'A1:B1:C1:D2:E2',
'A1:B1:C2:D1:E1',
'A1:B1:C2:D1:E2',
'A1:B1:C2:D2:E1',
'A1:B1:C2:D2:E2',
'A1:B1:C3:D1:E1',
'A1:B1:C3:D1:E2',
'A1:B1:C3:D2:E1',
'A1:B1:C3:D2:E2',
'A1:B2:C1:D1:E1',
'A1:B2:C1:D1:E2',
'A1:B2:C1:D2:E1',
'A1:B2:C1:D2:E2',
'A1:B2:C2:D1:E1',
'A1:B2:C2:D1:E2',
'A1:B2:C2:D2:E1',
'A1:B2:C2:D2:E2',
'A1:B2:C3:D1:E1',
'A1:B2:C3:D1:E2',
'A1:B2:C3:D2:E1',
'A1:B2:C3:D2:E2',
'A2:B1:C1:D1:E1',
'A2:B1:C1:D1:E2',
'A2:B1:C1:D2:E1',
'A2:B1:C1:D2:E2',
'A2:B1:C2:D1:E1',
'A2:B1:C2:D1:E2',
'A2:B1:C2:D2:E1',
'A2:B1:C2:D2:E2',
'A2:B1:C3:D1:E1',
'A2:B1:C3:D1:E2',
'A2:B1:C3:D2:E1',
'A2:B1:C3:D2:E2',
'A2:B2:C1:D1:E1',
'A2:B2:C1:D1:E2',
'A2:B2:C1:D2:E1',
'A2:B2:C1:D2:E2',
'A2:B2:C2:D1:E1',
'A2:B2:C2:D1:E2',
'A2:B2:C2:D2:E1',
'A2:B2:C2:D2:E2',
'A2:B2:C3:D1:E1',
'A2:B2:C3:D1:E2',
'A2:B2:C3:D2:E1',
'A2:B2:C3:D2:E2'
];

向最简代码发起挑战,你不来试试?

慕田峪4524236
浏览 1026回答 13
13回答

忽然笑

这不就是排列组合算法么,应该一个递归可以搞定。

至尊宝的传说

兄台确定?不妨试试,贴出来大家交流交流

江户川乱折腾

@黒蚁: JS调试比较麻烦,要是用C#,我用linq一句代码应该可以搞定。

杨魅力

想法: objectA.A,objectA.B,objectA.C,objectA.D,objectA.E这是五个数组, 再五个for循环嵌套输出每个数组的name,输出的数组就是result了

萧十郎

我感觉 有点意思哎 object A 中的 A1怎么调取 出来呢

森林海

有答案了,过来学习下吧

肥皂起泡泡

js计较麻烦,尝试后觉得只有字符串拼接是最简单的写法。

一只名叫tom的猫

function init(initData){ initData = initData || {};//需要拼接出不重复的数组 var data = []; var keys = []; for (var i in initData){ keys.push(i); }; var newkeys = keys.map(function(e,i,d){ var leng = d.length; if(i < leng && i > 0){ return d[leng-i]; }; return e; }); var evalObj = ""; for (var i = 0 ; i < keys.length ; i++){ evalObj += ('for(var '+newkeys[i]+' = 0 ; '+newkeys[i]+' < initData["'+newkeys[i]+'"].length ; '+newkeys[i]+'++){\n'); }; evalObj += "data.push(\n"; for (var i = 0 ; i < keys.length ; i++){ var ex = '+ ":" +'; if(i == keys.length-1){ ex = ""; } evalObj += 'initData["'+keys[i]+'"]['+keys[i]+'].name'+ex+'\n'; } evalObj += ")\n"; for (var i = 0 ; i < keys.length ; i++){ evalObj +="}\n"; } eval(evalObj); return data;//返回最终数据}

狐的传说

欢迎更简单的方法分享,哈哈~~~~~~~~~~~
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答