Извиняюсь за неуклюжую формулировку, я изо всех сил пытаюсь описать эту проблему.
Моя цель - написать функцию, которая принимает три переменные и выводит двумерный массив с таким шаблоном:
var foo = function(x, y, z) {
array = [
[x + 8, y + 16, z + 35],
[x + 6, y + 8, z + 30],
[x + 4, y + 4, z + 20],
[x + 2, y + 2, z + 10],
[x , y , z ],
[x - 2, y + 2, z - 10],
[x - 4, y + 4, z - 20],
[x - 6, y + 8, z - 30],
[x - 8, y + 16, z - 35]
]
return array;
}
Очевидно, что такой способ написания функции кажется довольно неэффективным.
Один из способов, который я попытался решить, - это цикл.Но мое решение представляет три массива и также довольно неэлегантно.
var x_mod = [8, 6, 4, 2, 0, -2, -4, -6, -8];
var y_mod = [16, 8, 4, 2, 0, 2, 4, 8, 16];
var z_mod = [35, 30, 20, 10, 0, -10, -20, -30, -35];
for(let i = 0; i < 9; i++) {
array[i] = [x + x_mod[i], y + y_mod[i], z + z_mod[i]);
}
Есть ли лучший способ написания этого алгоритма?Я также был бы признателен за любые подсказки относительно того, как называется эта проблема, или что я должен изучить, чтобы решить ее.
Спасибо!
РЕДАКТИРОВАТЬ
Это пример оптимизации, о которой я думал.
Следующая функция
var bar = function(x, y, z) {
array = [
[x + 1, y + 2, z + 3],
[x + 2, y + 4, z + 6],
[x + 3, y + 6, z + 9]
]
return array;
}
также может быть написана следующим образом:
var bar = function(x, y, z) {
array = [];
for(var i = 1; i < 4; i++)
array[i] = [x + i, x + i*2, x + i*3];
return array;
}
Это та разновидность «оптимизации», которую я хотел применить к моей исходной проблеме.Опять же, я прошу прощения, что мне не хватает словарного запаса, чтобы адекватно описать эту проблему.