2010-10-21 6 views
1

Hey, Im essayant de faire un tableau imbriqué dans JSJS tableaux imbriqués

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", 
           ), 
        ); 

débogueur de Chrome me dit que), à ​​la fin du premier réseau imbriqué est un « jeton inattendu »

Répondre

26

De votre code, il semble que vous essayez d'utiliser des tableaux de style PHP en JavaScript. Les tableaux JavaScript ne fonctionnent pas comme les tableaux PHP. Voici quelque chose qui est plus susceptible de travailler:

var 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" 
    } 
]; 

Pour expliquer un Littler plus loin, en JavaScript vous créez un nouveau tableau comme celui-ci:

var myArray = [ 5, 10, 15 ]; 

Les crochets ([]) indiquent le début et la fin de le tableau et les virgules (,) séparent chaque élément du tableau. Ensuite, pour accéder aux éléments du tableau, nous ferions quelque chose comme ceci:

alert(myArray[0]); 

... qui donnerait (le premier élément, ou « 0e » dans le tableau) « 5 ».

Maintenant, alors que PHP a le tableau associatif (array('a' => 1, ...)), en JavaScript il n'y a pas de "tableau associatif"; plutôt, vous utilisez un « objet littéral, » comme ceci:

var myObject = { a: 5, b: 10, c: 15 }; 

Cela crée un nouvel objet avec des propriétés (vous pouvez penser à eux comme des clés) nommées « a », « b » et « c ». Il y a deux façons d'accéder à une propriété:

alert(myObject['b']); 
alert(myObject.b); 

Dans les deux cas, « 10 » (la valeur nous avons attribué à la propriété « b ») serait donnée.

Maintenant, revenons à votre exercice. Vous verrez qu'ici nous avons créé un tableau ([]) et lui avons donné trois éléments, dont chacun est un littéral d'objet ({}). Pour y accéder, par exemple, la propriété « utilisateur » du premier élément, nous ferait ceci:

alert(lines[0].user); // => "User1" 

Edit: Si vous souhaitez nommer les éléments du tableau extérieur, il doit être changé à un objet littéral, et peut être emboîtés comme ceci:

var lines = { 
    one: { time:  "10:00:00", 
      user:  "User1", 
      content: "Line1" 
     }, 
    two: { ... 
     }, 
     ... 
}; 

J'ai nommé les articles « un », « deux » et « trois » pour des raisons de clarté, mais vous pouvez utiliser toutes les valeurs que vous s'il vous plaît. Cependant, si vous avez l'intention d'utiliser des noms de propriétés numériques - 0, 1, 2, etc. - comme dans votre exemple de code, vous pouvez aussi utiliser l'autre tableau plutôt que l'objet. Contrairement à PHP, JavaScript n'autorise pas les "gaps" dans un tableau.Par exemple:

var myArr = [1,2]; 
myArr[5] = 3; 
alert(myArr); // => [ 1, 2, undefined, undefined, undefined, 3 ]; 
+0

ahh, je pensais que j'aurais pu avoir mon PHP et JS mélangés, ce que je reçois pour essayer d'apprendre les deux à la fois. est-il possible de nommer les clés pour les tableaux parents aussi? (juste curieux) – Diesal11

+0

Oui c'est en faisant un 'var line = {" 0 ": {time:" 10:00:00 ", ...}, ...}'. Il devient alors un objet que vous pouvez itérer avec 'for (var i dans les lignes)' –

+1

Diesal11, j'ai ajouté quelques éclaircissements à ma réponse. En ce qui concerne le commentaire de Salman, il est difficile d'itéter sur les propriétés d'un objet comme ceci pour deux raisons: Premièrement, il peut avoir des propriétés autres que celles que vous vouliez, surtout si vous utilisez des bibliothèques externes comme jQuery; et deuxièmement, les propriétés ne seront pas commandées. Si vous voulez les parcourir dans un ordre spécifique, vous devez utiliser un tableau - Object n'est pas un type de données ordonné. –

3

essayer cette

var lines = [ {'time': 'the time', 'user': 'the user', 'content': 'the content'}, {'time': 'the time', 'user': 'the user', 'content': 'the content'}]; 
0

un petit standard, 'oeil' fix


var lines = [{ 
    'time': 'the time', 
    'user': 'the user', 
    'content': 'the content' 
}, 
{ 
    'time': 'the time', 
    'user': 'the user', 
    'content': 'the content' 
}]; 
0

bien, je ne pense pas que le problème est avec la place crochets car dans les tableaux javaScript peuvent être déclarés de l'une des façons suivantes -

var arr = new Array(element0, element1, ..., elementN); 
var arr = Array(element0, element1, ..., elementN); 
var arr = [element0, element1, ..., elementN]; 

Pour une référence plus solide, visitez ce MDN link. Le problème selon moi pourrait être le choix des clés.
P.S. Je suis un débutant et j'apprends juste d'ici et là. Si je me suis trompé alors s'il vous plaît corrigez-moi parce que cette question SO m'a traîné dans la confusion.

Questions connexes