2D-массив, с которым я работаю, имеет разную длину для каждой строки, например:
var a = [2, 5, -12, 9];
var b = [54.0, 0.3];
var c = ["tree", "sun", "pool"]
var all = [a, b, c]
Любая строка в 2D-массиве иногда может быть нулевой. Массив вышеЭто всего лишь пример.
Я хочу получить по одному значению из каждой строки для каждого, сделать что-нибудь с этим значением, затем получить другую комбинацию значений и т. д.
Пример:
//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;
}
Боюсь, что весь код слишком длинный и имеет некоторые дубликатыкоды в коммутаторе.Можно ли это упростить?
Я видел сообщение с тем же вопросом и пытался ответить на него.К сожалению, платформа, на которой я пишу код (Fandom), не поддерживает эту функцию генератора.Я спросил, это только поддержка Javascript до ES3 или ES4.
Спасибо, что посмотрели на этот вопрос!