[JavaScript] Tworzenie tablic wielowymiarowych o ujemnych indeksach

Witam.

Tworzę prostą grę sandboxową w ascii oparta o układ współrzędnych.

 

W celu stworzenia układu muszę użyć tablicy wielowymiarowej, gdyż mapa może być nawet nieskończenie wielka (zależnie od tego jak daleko pójdzie gracz). Dzięki tej tablicy będę mógł także potem łatwo wpisać w jej komórki wygenerowane “obiekty” (np. # - krzak), a następnie przenieść tablicę na mapę.

 

…i własnie przy tworzeniu tablicy wielowymiarowej napotkałem na problem.

for(var y=num-1; y>(num)*(-1); y--) { //tworzenie kolumn
   coordinates[y] = y; //dodanie indeksu kolumny do tabeli
   //[...]
   for(var x=(num-1)*(-1); x<num; x++) { //tworzenie wierszy
      coordinates[y][x] = x; //dodanie indeksu wiersza do określonej kolumny w tabeli
      //[...]
   }
}



/* Dla wielkości mapy równej 11 konsola powinna zwrócić 141-elementową tablicę:
   coordinates[od -5 do 5][od -5 do 5] --> coordinates[11 elementow][11 elementow] --> łącznie 141

Tymczasem zwraca:

--> coordinates
<-- [0, 1, 2, 3, 4, 5]

--> console.log(coordinates)
<-- [0, 1, 2, 3, 4, 5, -1: -1, -2: -2, -3: -3, -4: -4, -5: -5]

Po odpowiedziach jakie otrzymuję od konsoli widzę, że coś jest nie tak.

 

  1. Czy dozwolone jest wgl. tworzenie tablic z ujemnymi indeksami, które będą normalnie funkcjonować ?  np. tab[-1][-2] = 3

 

  1. Czy można tworzyć asocjacyjne tablice wymiarowe ? np. tab[’-1’][’-2’] = 2; (dzięki temu mógłbym uniknąć wpisywania ujemnego indeksu jeśli jest to niedozwolone).

  2. Jak potem przekonwertować string na integer ?

 

Z góry dziękuję i pozdrawiam !

Opisałem problem dość skrótowo, jeśli coś jest niezrozumiałe, to proszę pytać :))

ad 1. Nie i nie jest to potrzebne. Jeśli chcesz tak trzymać dane (do czego jeszcze wrócę *) to zamiast ujemnych indexów powinieneś stosować metodę która zmapuje twoje ujemne indeksy na zwykle.

 

ad 2.

var tab = {};

tab[’-1’] = {};

tab[’-2’] = 2;

ale lepiej sobie to opakować w jakąś metodę

 

ad 3.

var s = “10”;

var i = parseInt(s,10); // drugi parametr nie jest wymagany ale wielu mówi aby z niego korzystać. To system liczbowy, tj. z podstawą 10 , czyli system dziesiętny.

 

ad *. Wracając do trzymania danych w tablicy.

Po pierwsze: nie odwołuj się na sztywno do to tej tablicy (“coordinates”). Zrób metodę, która Ci ją zwróci, ale jeszcze lepiej pobierze czy zapisze do niej dane. Bo…

Po drugie: Jeśli ta tablica ma być ogromna to trzymanie danych w niej może nie być dobrym pomysłem. Pytanie jeszcze ile będzie w niej elementów różnych od 0 ? Może faktycznie lepszym pomysłem będzie tablica asocjacyjna czy inna struktura.

Dzięki za odpowiedź i przepraszam, że dopiero teraz odpisuję.

 

Myślę, że skorzystam jednak z wielowymiarowej tablicy asocjacyjnej.

Wydaje mi się być najwygodniejsza, a i zależy mi w sumie głównie na funkcjonalności.

 

Myślałem, żeby zrobić to tak:

coordinates[''+y][''+x] = x;

lub tak:

coordinates[y.toString()][x.toString()] = x;

ale oba te sposoby nie chcą działać.

Czy dałoby się zrobić to właśnie w ten sposób, że podaje się nazwę tablicy, potem dwie klamry [] z indeksami tekstowymi, a na końcu przypisuje wartość ?