已知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'
];
向最简代码发起挑战,你不来试试?
如沧海一杰所言,一句递归就可以搞定,也是春节吃的太多,脑子不灵光了,欠捶啊!
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 proArray=Object.getOwnPropertyNames(objectA),
proLen=proArray.length,
result = new Array(),
count;
for (var i = 0; i <proLen ; i++) {
var curPro = objectA[proArray[i]];
count = curPro.length;
if (i == 0) {
for (var c = 0; c < count; c++) {
result.push(curPro[c].name);
}
} else {
var tNameArray = result;
result = [];
for (var b = 0, blen = tNameArray.length; b < blen; b++) {
for (var c = 0; c < count; c++) {
result.push(tNameArray[b] + ':' + curPro[c].name);
}
}
}
}
console.log(result);
$(function () {
//递归
var loop = function (obj, lastArray,index) {
return index >= initial.length?lastArray:loop(obj, add(lastArray, obj[initial[index]]), ++index);
}
var add = function (lastArray, array) {
var strResult = [];
for (var i = 0; i < lastArray.length; i++) {
for (var j = 0; j < array.length; j++) {
strResult.push(lastArray[i] + (lastArray[i] == "" ? "": ":") + array[j].name);
}
}
return strResult;
}
var result = [];
var initial = ['A','B','C','D','E'];//暂时没有好的办法获取到,欢迎补充
result=loop(objectA, [""], 0);
console.log(result);
})
兄台,受教了!代码简洁,逻辑清晰!
用 Object.getOwnPropertyNames(objectA) 可以得到 ['A','B','C','D','E']
@黒蚁: 我也想了好久,然后实现也是。Object.getOwnPropertyNames(objectA) 这个方法很常见,但我没有使用过,原来是这个意思,多谢了。
这不就是排列组合算法么,应该一个递归可以搞定。
兄台确定?不妨试试,贴出来大家交流交流
@黒蚁: JS调试比较麻烦,要是用C#,我用linq一句代码应该可以搞定。
@沧海一杰: 感谢点拨,茅厕蹲开啊。
JS 调试的确不太爽,个人喜好用chrome的开发者工具 Sources+Console 组合调试。
想法:
objectA.A,objectA.B,objectA.C,objectA.D,objectA.E这是五个数组,
再五个for循环嵌套输出每个数组的name,输出的数组就是result了
我感觉 有点意思哎 object
A 中的 A1怎么调取 出来呢
有答案了,过来学习下吧
js计较麻烦,尝试后觉得只有字符串拼接是最简单的写法。
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;//返回最终数据
}
以下是处理过程
/**
* Created by 张云山 on 2017/2/20.
*/
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',//1[0][0]:2[0][0]:3[0][0]:4[0][0]:5[0][0]
'A1:B1:C1:D1:E2',//1[0][0]:2[0][0]:3[0][0]:4[0][0]:5[1][0]
'A1:B1:C1:D2:E1',//1[0][0]:2[0][0]:3[0][0]:4[1][0]:5[0][0]
'A1:B1:C1:D2:E2',//1[0][0]:2[0][0]:3[0][0]:4[1][0]:5[1][0]
'A1:B1:C2:D1:E1',//1[0][0]:2[0][0]:3[1][0]:4[0][0]:5[0][0]
'A1:B1:C2:D1:E2',//1[0][0]:2[0][0]:3[1][0]:4[0][0]:5[1][0]
'A1:B1:C2:D2:E1',//1[0][0]:2[0][0]:3[1][0]:4[1][0]:5[0][0]
'A1:B1:C2:D2:E2',//1[0][0]:2[0][0]:3[1][0]:4[1][0]:5[1][0]
'A1:B1:C3:D1:E1',//1[0][0]:2[0][0]:3[2][0]:4[0][0]:5[0][0]
'A1:B1:C3:D1:E2',//1[0][0]:2[0][0]:3[2][0]:4[0][0]:5[1][0]
'A1:B1:C3:D2:E1',//1[0][0]:2[0][0]:3[2][0]:4[1][0]:5[0][0]
'A1:B1:C3:D2:E2',//1[0][0]:2[0][0]:3[2][0]:4[1][0]:5[1][0]
'A1:B2:C1:D1:E1',//1[0][0]:2[1][0]:3[0][0]:4[0][0]:5[0][0]
'A1:B2:C1:D1:E2',//1[0][0]:2[1][0]:3[0][0]:4[0][0]:5[1][0]
'A1:B2:C1:D2:E1',//1[0][0]:2[1][0]:3[0][0]:4[1][0]:5[0][0]
'A1:B2:C1:D2:E2',//1[0][0]:2[1][0]:3[0][0]:4[1][0]:5[1][0]
'A1:B2:C2:D1:E1',//1[0][0]:2[1][0]:3[1][0]:4[0][0]:5[0][0]
'A1:B2:C2:D1:E2',//1[0][0]:2[1][0]:3[1][0]:4[0][0]:5[1][0]
'A1:B2:C2:D2:E1',//1[0][0]:2[1][0]:3[1][0]:4[1][0]:5[0][0]
'A1:B2:C2:D2:E2',//1[0][0]:2[1][0]:3[1][0]:4[1][0]:5[1][0]
'A1:B2:C3:D1:E1',//1[0][0]:2[1][0]:3[2][0]:4[0][0]:5[0][0]
'A1:B2:C3:D1:E2',//1[0][0]:2[1][0]:3[2][0]:4[0][0]:5[1][0]
'A1:B2:C3:D2:E1',//1[0][0]:2[1][0]:3[2][0]:4[1][0]:5[0][0]
'A1:B2:C3:D2:E2',//1[0][0]:2[1][0]:3[2][0]:4[1][0]:5[1][0]
/*********************************************************/
'A2:B1:C1:D1:E1',//1[1][0]:2[0][0]:3[0][0]:4[0][0]:5[0][0]
'A2:B1:C1:D1:E2',//1[1][0]:2[0][0]:3[0][0]:4[0][0]:5[1][0]
'A2:B1:C1:D2:E1',//1[1][0]:2[0][0]:3[0][0]:4[1][0]:5[0][0]
'A2:B1:C1:D2:E2',//1[1][0]:2[0][0]:3[0][0]:4[1][0]:5[1][0]
'A2:B1:C2:D1:E1',//1[1][0]:2[0][0]:3[1][0]:4[0][0]:5[0][0]
'A2:B1:C2:D1:E2',//1[1][0]:2[0][0]:3[1][0]:4[0][0]:5[1][0]
'A2:B1:C2:D2:E1',//1[1][0]:2[0][0]:3[1][0]:4[1][0]:5[0][0]
'A2:B1:C2:D2:E2',//1[1][0]:2[0][0]:3[1][0]:4[1][0]:5[1][0]
'A2:B1:C3:D1:E1',//1[1][0]:2[0][0]:3[2][0]:4[0][0]:5[0][0]
'A2:B1:C3:D1:E2',//1[1][0]:2[0][0]:3[2][0]:4[0][0]:5[1][0]
'A2:B1:C3:D2:E1',//1[1][0]:2[0][0]:3[2][0]:4[1][0]:5[0][0]
'A2:B1:C3:D2:E2',//1[1][0]:2[0][0]:3[2][0]:4[1][0]:5[1][0]
'A2:B2:C1:D1:E1',//1[1][0]:2[1][0]:3[0][0]:4[0][0]:5[0][0]
'A2:B2:C1:D1:E2',//1[1][0]:2[1][0]:3[0][0]:4[0][0]:5[1][0]
'A2:B2:C1:D2:E1',//1[1][0]:2[1][0]:3[0][0]:4[1][0]:5[0][0]
'A2:B2:C1:D2:E2',//1[1][0]:2[1][0]:3[0][0]:4[1][0]:5[1][0]
'A2:B2:C2:D1:E1',//1[1][0]:2[1][0]:3[1][0]:4[0][0]:5[0][0]
'A2:B2:C2:D1:E2',//1[1][0]:2[1][0]:3[1][0]:4[0][0]:5[1][0]
'A2:B2:C2:D2:E1',//1[1][0]:2[1][0]:3[1][0]:4[1][0]:5[0][0]
'A2:B2:C2:D2:E2',//1[1][0]:2[1][0]:3[1][0]:4[1][0]:5[1][0]
'A2:B2:C3:D1:E1',//1[1][0]:2[1][0]:3[2][0]:4[0][0]:5[0][0]
'A2:B2:C3:D1:E2',//1[1][0]:2[1][0]:3[2][0]:4[0][0]:5[1][0]
'A2:B2:C3:D2:E1',//1[1][0]:2[1][0]:3[2][0]:4[1][0]:5[0][0]
'A2:B2:C3:D2:E2',//1[1][0]:2[1][0]:3[2][0]:4[1][0]:5[1][0]
];
console.log(objectA);
console.log(result.join());
console.log("*************************************************************");
var data = [];
/*
for(var A = 0 ; A < objectA["A"].length ; A++){
for(var E = 0 ; E < objectA["E"].length ; E++) {
for (var D = 0; D < objectA["D"].length; D++) {
for (var C = 0; C < objectA["C"].length; C++) {
for (var B = 0; B < objectA["B"].length; B++){
data.push(
objectA["A"][A].name
+ ":" + objectA["B"][B].name
+ ":" + objectA["C"][C].name
+ ":" + objectA["D"][D].name
+ ":" + objectA["E"][E].name
)
}
}
}
}
}
///*/
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;//返回最终数据
}
data = init();
console.log(data.join());
欢迎更简单的方法分享,哈哈~~~~~~~~~~~
@张云山: 感谢云山兄的分享!
十三兄给出的代码很不错,欢迎有时间来交流下。
h好的