Jak wpisać wartość z podaniem klucza do pustej tablicy

0

Jeżeli tablica nie jest pusta, np. tab(2 => 'asd', 7 => 'qwe') to mogę napisać:
tab[3] = 'ggg';
i otrzymuję tablicę: tab(2 => 'asd', 3 => ggg, 7 => 'qwe').
Ale jeżeli tablica jest pusta i napiszę tab[3] = 'ggg' to wcześniejsze elementy mają wartości undefined zamiast nie istnieć - tab(undefined, undefined, undefined, 4 => 'ggg').
Tak pokazuje funkcja console.log(tab). Jest sposób, aby to obejść?

0

Jeżeli tablica nie jest pusta i ale ma długość 10, a Ty dodasz element od 20 to też wypełni Ci to undefined. Nie możesz tego obejść z tego co mi wiadomo, a nawet jeżeli to lepiej tego nie robić, js ma wystarczająco dużo pulapek.

Za to możesz zrobić tak (co nie oznacza, że powinieneś)

var x = [];
x.length
//0
x.customProperty = "tadam";
x["customProperty"];
//"tadam"
x.length
//0
0

Nie chcę żeby zwracało 0 jak coś jest. Chce żeby działało tak jak w php. Jak tablica jest pusta i podam jej klucz i wartość to ma mieć 1 element o podanej wartości pod podanym kluczem.

0

tak będzie dobrze?

12:48:44.987 tab = {};
tab[2] = 'asd';
tab[7] = 'qwe';
tab[3] = 'ggg';
tab

12:48:44.993 Object { 2: "asd", 3: "ggg", 7: "qwe" }
0

W jsie nie ma tablic asocjacyjnych wiec nie bedzie to tak działalo. Możesz zrobić tak jak kolega wyżej napisał, ale nie ma to nic wspólnego z tablicą i indeksem. To tak jakbyś w php zrobił:

$tab = new stdClass();
tab->a = 'dadad';
object(stdClass)[478]
  public 'a' => string 'dadad' (length=5)

Tyle, że w js możesz naprzemiennie używać property accessors (z wyjątkami)

0

Rozwiązałem to dodając byle co do tablicy i usuwając na starcie. Dopiero później sobie operuję i już można przypisywać normalnie do kluczy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1