Ahoj, pokouším se vytvořit vnořené pole v JS
var lines = new Array( "0"= new Array( 0['time']="10:00:00", 0['user']="User1", 0['content']="Line1", ), "1"= new Array( 1['time']="20:00:00", 1['user']="User2", 1['content']="Line2", ), "2"= new Array( 2['time']="30:00:00", 2['user']="User3", 2['content']="Line3", ), );
Ladicí program Chrome mi říká ), na konci prvního vnořeného pole je „Neočekávaný token“
Odpověď
Z vašeho kódu to vypadá, že se v JavaScriptu pokoušíte použít pole ve stylu PHP. Pole JavaScriptu nefungují jako pole PHP. Zde je něco, co bude pravděpodobně fungovat:
const lines = [ { time: '10:00:00', user: 'User1', content: 'Line1', }, { time: '20:00:00', user: 'User2', content: 'Line3', }, { time: '30:00:00', user: 'User3', content: 'Line3', }, ];
Abychom to vysvětlili trochu dále, v JavaScriptu vytvoříte nové pole, jako je toto:
const myArray = [ 5, 10, 15 ];
Hranaté závorky ([]
) označují začátek a konec pole a čárky (,
) oddělte prvky pole. Pak bychom pro přístup k prvkům udělali něco takového:
alert( myArray[0] );
…což by dalo 5
(první neboli „0.“ prvek v poli).
Nyní, zatímco PHP má asociativní pole (array('a' => 1, ...)
), v JavaScriptu není žádné „asociativní pole“; spíše použijete „objektový literál“, jako je tento:
const myObject = { a: 5, b: 10, c: 15 };
Tím se vytvoří nový objekt s vlastnostmi (můžete si je představit jako klíče) s názvem a
, b
a c
. Existují dva způsoby přístupu ke službě:
alert( myObject['b'] ); alert( myObject.b );
V obou případech 10
(hodnota, kterou jsme přiřadili vlastnosti b
) by bylo dáno.
Nyní zpět k vašemu cvičení. Uvidíte, že jsme zde vytvořili pole ([]
) a dal mu tři prvky, z nichž každý je objektový literál ({}
). Chcete-li získat přístup, řekněme user
vlastnosti prvního prvku bychom udělali toto:
alert( lines[0].user ); // => "User1"
Upravit: Pokud chcete pojmenovat prvky vnějšího pole, musí být změněno na objektový literál a může být vnořeno takto:
const lines = { one: { time: '10:00:00', user: 'User1', content: 'Line1', }, two: { // ... }, // ... };
Položky jsem pojmenoval one
, two
, atd. kvůli přehlednosti, ale můžete použít libovolné hodnoty. Pokud však zamýšlíte používat číselné názvy vlastností — 0
, 1
, 2
, atd. – stejně jako ve vašem příkladu kódu můžete místo objektu použít jiné pole. Na rozdíl od PHP JavaScript neumožňuje „mezery“ v poli – budou vyplněny undefined
. Například:
const myArr = [1, 2]; myArr[5] = 3; alert( myArr ); // => [ 1, 2, undefined, undefined, undefined, 3 ];