Я должен сказать, что ваш вопрос довольно неясен, но я думаю, что получил его.
Другими словами, вы говорите: у меня есть массив, содержащий кучу чисел, логически они представляют координаты,дело не в том, что координаты являются подмассивами внутри мастер-массива, просто они выглядят 2 на 2, но это линейный массив.
То, что вам нужно, это то, что определяет соседние координаты и генерирует новый массив, содержащий их.
После этого вы хотите пройти через новые массивы и сгенерировать новые массивы, содержащие уникальные элементы.
Ну, это вопрос, теперь ответ.Во-первых, второй момент зависит от того, как далеко вы хотите зайти, я думаю, что это ненормальная сетка с координатами x, y, но как близко вы хотите зайти?Следующее относится только к соседним промежуточным элементам, до 8 точек могут быть смежными с одной точкой.
[1,1][2,1][3,1]
[1,2][2,2][3,2]
[1,3][2,3][3,3]
Может ли это быть представлением сетки, если ваш мастер-массив имеет [2,2]координат, вы хотите построить массив, который начинается с того единственного и всех найденных вами смежных объектов, скажем, как у основного массива [3,2], затем вы хотите добавить его в подмассив [2,2].
Я действительно не пишу код, я просто собираюсь объяснить, какой алгоритм вы можете использовать.Чтобы построить массивы второй точки, давайте назовем их массивами Adjacents (AA), которые вы могли бы:
Первая координата всегда будет строить первый AA. Чтобы найти смежные объекты, вы будете циклически перемещаться по мастер-массиву и выполнять «проверку смежности» длякаждая координата, которая будет: вторая x == (первая x-1, x или x + 1) и вторая y == (первая y-1, y или y + 1), если она проходит, то pop / push, если нет... следующий.В случае, если вы закончите цикл через главный массив, это означает, что AA завершен, и вы должны начать новый AA со следующей координатой.Повторяйте до тех пор, пока мастер-массив не станет пустым.
Затем создать массив уникальных элементов - довольно простой цикл, я написал похожую функцию, которая делает что-то подобное, но создает массив с элементом и сколько разоно появляется в массиве (экземпляры):
function uniqueCnt( ori) { // agroups and counts unique elements of an array, scrubs '' elements
var res = []; // resulting array, ori parameter stands for original array
for( let cntA = 0; cntA < ori.length; cntA++) {
for( cntB = 0; cntB < res.length; cntB += 2) if( ori[cntA] == res[cntB]) { res[cntB + 1]++; break; } // if it matches means it's another instance then increase that element count
if( cntB == res.length && ori[cntA] != '') res.push( ori[cntA], 1); // New element found then push it and start count
}
return res; // returns the agrouped array 0:element 1:instances...
}
Если вам не нужно количество экземпляров, вам понадобится еще более простая функция, вы можете попробовать изменить эту.