Я не знал, как правильно сформулировать название.
У меня есть 2 индекса из 2D-массива (x и y), и мне нужно умножить их вместе, чтобы получить индекс для второго массива (1D), однако это не так просто, потому что, если x или y равны нулю, он вернет ноль независимо от другого значения.
Я мог бы обойти это, используя вложенные циклы, показанные ниже:
int count = 0;
for( int i = 0; i < x; i++ )
{
for( int j = 0; j < y; j++ )
{
count++;
}
}
//count now equals desired value
... но это кажется ужасно непрактичным.
Мне это кажется чем-то невероятно простым, и я откладывал вопрос до сих пор, думая, что это может быть так.
Не знаю, почему я не подумал об этом. Я знал, что это было что-то простое, и моя голова не волновалась.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Давайте воспользуемся следующими данными для создания примера:
var array_2d = [[0,1,2],[3,4,5]];
var array_1d = [0, 1, 2, 3, 4, 5];
Если все ваши подмассивы имеют одинаковый размер, вы можете просто умножить свой индекс i на your sub array’s length, чтобы найти соответствующую «строку» вашего одномерного массива. Затем вы можете просто добавить индекс «столбца» вашего массива.
Но это будет работать только в том случае, если вы работаете с матрицами с фиксированной шириной.
var sub_dimensional_array_length = 3;
for (var i = 0; i < array_2d.length; i++) {
for (var j = 0; j < array_2d[i].length; j++) {
var array_1d_index = (sub_dimensional_array_length * i) + j;
console.info(array_2d[i][j], array_1d[array_1d_index]);
}
}
Почему не
count = x * y? Похоже, вам может понадобиться что-то вродеA[x][y] = B[y * A.length + x]