web-dev-qa-db-fra.com

Tableau / structure JavaScript

Je voudrais créer une structure en javascript. J'ai une paire d'informations, je voudrais utiliser, par exemple:

array[1] = new Struct();
array[1].name = "parameter-name";
array[1].value = "parameter-value";

array[2] = new Struct();
array[2].name = "parameter-name2";
array[2].value = "parameter-value2";

Cela peut être sur une page différente avec des valeurs différentes, peut-être sur un élément de mon tableau, peut-être 2-20 ..

Plus tard, dans mon javascript générique, je voudrais analyser le tableau et continuer avec mes paramètres, exemple:

for(i=1 to length_of_my_array) {
  _tag.array[i].name = array[i].value; 
}

Comment puis-je réaliser cela avec du javascript pur? Merci pour tout indice!

21
da_didi

Tant que vous ne voulez pas de fonctionnalités sophistiquées, il est vraiment facile de créer de telles structures en JavaScript. En fait, le code que vous avez publié fonctionnera presque, si vous remplacez la new Struct() par ceci:

array[1] = {};

Cela crée un objet vide et vous pouvez y mettre toutes les propriétés souhaitées, telles que name et value.

Pour créer un tableau, vous pouvez faire quelque chose comme ceci:

var array = []; // empty array

// object literal notation to create your structures
array.Push({ name: 'abc', value: 'def' });
array.Push({ name: 'ghi', value: 'jkl' });
...

Et pour parcourir le tableau:

for (var i = 0; i < array.length; i++) {
  // use array[i] here
}
34
casablanca

Il serait bon d'en savoir plus sur le problème que vous essayez de résoudre.

Je ne pense pas qu'il existe un objet en JavaScript appelé Struct, sauf si vous en définissez un.

Je pense que ce que vous recherchez est un objet JavaScript au lieu de Struct. Il existe plusieurs façons de créer un nouvel objet, et ils peuvent être imbriqués dans un tableau ou dans d'autres objets.

myArray[0] = new Object();
myArray[0].name = "parameter-name";
myArray[0].value = "parameter-value";

myArray[1] = new Object();
myArray[1].name = "parameter-name2";
myArray[1].value = "parameter-value2";

Notez que j'ai changé votre code de deux manières: 1. "tableau" est nommé "monArray" pour clarifier que nous faisons référence à un tableau particulier. 2. La première instance de myArray est 0. Les tableaux commencent à 0 en Javascript. 3. Struct est changé en Object.

myarray = [
    {
        "name":"parameter-name",
        "value":"parameter-value"
    },
    {
        "name":"parameter-name2",
        "value":"parameter-value2"
    }
];

Il s'agit d'une syntaxe alternative pour faire la même chose. Il utilise la "notation littérale" pour désigner un tableau (les crochets) et les objets (les crochets).

for(var i = 0; i < myArray.length; i++) {
    for(key in myArray[i]) {
        alert(key + " :: " myArray[i][key]);
    }
}

Cela fera une boucle sur le tableau et vous alertera pour chaque propriété de l'objet.

alert(myArray[0]['value']) //parameter-value
myArray[0]['value'] = "bar";
alert(myArray[0]['value']) //bar

Chaque propriété de chaque objet peut également recevoir une nouvelle valeur.

6
Adolph Trudeau

Vous pouvez définir des tableaux et des objets génériques en JavaScript/json pur:

var array = []; // empty array
array.Push({name: 'parameter-name', value: 'parameter-value'});
array.Push({name: 'parameter-name2', value: 'parameter-value2'});
console.log(array);
// Output: 
// [Object { name="parameter-name", value="parameter-value2"}, Object { name="parameter-name2", value="parameter-value2"}]

Vous pouvez également définir le même tableau comme suit:

var array = [
  {name: 'parameter-name', value: 'parameter-value'}, 
  {name: 'parameter-name2', value: 'parameter-value2'}
]; 

En ce qui concerne la boucle à travers le tableau:

for (var i = 0; i<array.length; i++) {
  var elem = array[i];
  console.log(elem.name, elem.value);
}

// Outputs:
// parameter-name parameter-value2
// parameter-name2 parameter-value2
3
gnarf

Je stockerais des littéraux d'objet dans le tableau, comme ceci:

var myArray = [];

myArray[0] = {name:"some name", value:"some value"};
myArray[1] = {name:"another name", value:"another value"};

for (i=0; i < myArray.length; i++) {
    console.log(myArray[i].name + ' / ' + myArray[i].value);
}
2
Rob Sobers
// initialize empty array    
var myArray = [];

// fill it with an object - the equivalent of a struct in javascript
myArray.Push({
  name: 'example-name'
  value: 'example-value'
});
// repeat as neccessary

// walking through the array
for (var i = 0; i < myArray.length; i++)
{
  // retrieving the record
  record = myArray[i];

  // and accessing a field
  doSomething(record.name);
}
1
sebasgo

Les objets Javascript sont des objets lâches: les propriétés peuvent être ajoutées et supprimées dynamiquement. Donc, créer un nouveau Struct (), comme vous le suggérez, ne garantit pas que l'objet retourné aura toujours les propriétés que vous attendez de lui. Vous devez vérifier la disponibilité des propriétés au point d'utilisation (typage canard):

var i, element;
for (i = 0; i < array.length; i++) {
  element = array[i];
  if (Object.hasOwnProperty.call(element, "name")
      &&  Object.hasOwnProperty.call(element, "value")) {
    _tag[element.name] = element.value;
  }
}

(De plus, je suppose que _tag est un objet lui-même, mais cela ne ressort pas clairement de votre exemple.)

Vous pourriez probablement utiliser une syntaxe plus succincte, mais cela dépend fortement des valeurs des propriétés. Par exemple, vous pourrez peut-être utiliser quelque chose comme ceci:

var i, element;
for (i = 0; i < array.length; i++) {
  element = array[i];
  if (element.name && element.value) {
    _tag[element.name] = element.value;
  }
}

Mais vous devez vous rendre compte que la condition ci-dessus sera fausse non seulement si l'une ou les deux propriétés (nom et valeur) ne sont pas définies, mais aussi si la valeur de l'un ou des deux fait référence à la chaîne vide, null, 0, NaN ou faux.

0
Bobby Eickhoff
var array = {paramName: 'paramValue', paramName2: 'paramValue2'};

for(i in array) {
    _tag.i = array.i;
}
0
Spudley

Il n'y a pas de "Struct" dans JavaScript uniquement Object

my_array = new Array();
my_array.Push({name: 'john', age:31});
my_array.Push({name: 'da_didi', age:120});

for (i=0; i<my_array.length; i++)
{
    alert(my_array[i].name);
}
0
John Giotta

Que diriez-vous

function Struct(name, value) {
  this.name = name;
  this.value = value;
}

arr[0] = new Struct("name1", "value1");
0
Juan Mendes