【发布时间】:2019-05-24 02:29:56
【问题描述】:
我正在使用的二维数组的每一行都有不同的长度,例如:
var a = [2, 5, -12, 9];
var b = [54.0, 0.3];
var c = ["tree", "sun", "pool"]
var all = [a, b, c]
二维数组中的任何行有时都可能为零。上面的数组只是一个示例。
我想做的是从每个人的每一行中获取一个值,用这些值做一些事情,然后得到另一个值的组合,等等。
例子:
//IF ALL ROWS HAVE CONTENT
var values = [all[0][0], all[1][0], all[2][0]];
//do something with it
values = [all[0][0], all[1][0], all[2][1]];
//do something with it
......
values = [all[0][3], all[1][1], all[2][2]];
//do something with it
//IF FIRST AND THRID ROWS HAVE CONTENT, THE SAMPLE OUTPUT
var values = [all[0][0], all[2][0]];
values = [all[0][0], all[2][1]];
......
values = [all[0][3], all[2][2]];
//IF ONLY SECOND ROWS HAVE CONTENT, THE SAMPLE OUTPUT
var values = [all[1][0]];
values = [all[1][1]];
这是我对代码逻辑流程的看法
//count how many rows are not empty
var arrayCount = 0;
for(var i=0; i < all.length; i++){
if(all[i].length !== 0){
arrayCount++;
}
}
//store the combination of values each time
var values = [];
//reference for rows
var x; var y;
//differentiate the looping based on the number of unempty rows
switch(arrayCount){
//one unempty row
case 1:
//figure out which one is not empty and set a's pointer to it
for(var q = 0; q < x.length; q++){
values.push(x[q]);
//do something with it
values.splice(1, 0);
}
break;
case 2:
//figure out which one are not empty and set a and b's pointer to them (don't know how, maybe using two loops for each row?)
for(var q = 0; q < x.length; q++){
values.push(x[q]);
for(var p = 0; p < y.length; p++){
values.push(y[p]);
//do something with it
values.splice(1, 1);
}
values.splice(1, 0);
}
break;
case 3:
//set pointers to all the rows
for(var q = 0; q < x.length; q++){
values.push(x[q]);
for(var p = 0; p < y.length; p++){
values.push(y[p]);
for(var r = 0; r < z.length; r++){
values.push(z[r]);
//do something with it
values.splice(1, 2);
}
values.splice(1, 1);
}
values.splice(1, 0);
}
break;
}
恐怕整个代码太长了,并且在开关中有一些重复的代码。可以简化吗?
我确实看到post 提出了同样的问题,我尝试了它的答案。不幸的是,我正在编码的平台(Fandom)不支持这个生成器功能。我问,它只支持 Javascript 到 ES3 或 ES4。
感谢您查看这个问题!
【问题讨论】:
-
这并不完全符合您的要求,但我最近需要生成一组值的所有可能排列,并使用this recursive function 完成了它。我认为它可能会帮助您想出完成任务的方法。
-
我在问题中添加了一个 ES4 标签,Fandom as in fandom.com 而你使用的是dev.fandom.com/wiki/Fandom_Developers_Wiki?还是其他文档?如果您澄清您正在使用的平台是什么,我将添加一个 Fandom 标签以帮助您获得正确的答案?
-
@rayhatfield 谢谢你的链接,我去看看
-
@JasonB 抱歉回复晚了,我所说的 Fandom 只是 fandom.com。在我发布这个问题之前,我没有找到与 Fandom 相关的标签。
-
还有另一个 stackoverflow 答案可以解决这个确切的问题。我通过 babel 的在线 repl 运行他们的代码,得到了丑陋但可操作的代码。我根据您的样本数据对其进行了测试,并得到了预期的结果。我没有发布它,因为它看起来其他人已经在这里回答了,但如果你想查看它,我可以挖掘一个链接。
标签: javascript arrays loops ecmascript-4