Tableau de cha=c3=aenes de caract=c3=a8res

9 réponses
Avatar
Gloops
Bonjour tout le monde,

Quand j'exécute ça, je vois "False", alors que je m'attends à voir "True".

Où est-ce que je me trompe ?


var A = [".jpg", ".png", ".gif"];
if(A.isarray)
{
WScript.Echo("True");
}
else
{
WScript.Echo("False");
}

--
Besoin d'un autre système, pas d'un autre gouvernement.

9 réponses

Avatar
db
Le 21/10/2017 à 23:19, Gloops a écrit :
Bonjour tout le monde,
Quand j'exécute ça, je vois "False", alors que je m'attends à voir "True".
Où est-ce que je me trompe ?
 var A = [".jpg", ".png", ".gif"];
 if(A.isarray)
 {
    WScript.Echo("True");
 }
 else
 {
    WScript.Echo("False");
 }

Peut-être :
if (Array.isArray(A))...
db
Avatar
Eric Demeester
Bonjour,
Gloops (Sat, 21 Oct 2017 23:19:48 +0200 - fr.comp.lang.javascript) :
Quand j'exécute ça, je vois "False", alors que je m'attends à voir "True".

Je pense que db a raison, il faut utiliser la méthode isArray() :
var A = [".jpg", ".png", ".gif"];
if(A.isarray)

if(Array.isArray(A))
{
WScript.Echo("True");
}
else
{
WScript.Echo("False");
}

doit renvoyer « True ».
Voir : https://www.w3schools.com/jsref/jsref_isarray.asp
Avatar
Gloops
Le 21/10/2017 à 23:32, db a écrit :
Le 21/10/2017 à 23:19, Gloops a écrit :
Bonjour tout le monde,
Quand j'exécute ça, je vois "False", alors que je m'attends à voir
"True".
Où est-ce que je me trompe ?
  var A = [".jpg", ".png", ".gif"];
  if(A.isarray)
  {
     WScript.Echo("True");
  }
  else
  {
     WScript.Echo("False");
  }

Peut-être :
if (Array.isArray(A))...
db

Merci pour la proposition, mais il me dit "Cet objet ne gère pas cette
propriété ou cette méthode.
D'ailleurs, pareil si je lui dis
var A = Array.of(".jpg", ".png", ".gif");
et avant j'ai essayé avec Array.from.
Il n'y a pas de déclaration particulière à faire, pour utiliser Array ?
--
Besoin d'un autre système, pas d'un autre gouvernement.
Avatar
Gloops
Le 22/10/2017 à 11:24, Eric Demeester a écrit :
Bonjour,
Gloops (Sat, 21 Oct 2017 23:19:48 +0200 - fr.comp.lang.javascript) :
Quand j'exécute ça, je vois "False", alors que je m'attends à voir "True".

Je pense que db a raison, il faut utiliser la méthode isArray() :
var A = [".jpg", ".png", ".gif"];
if(A.isarray)

if(Array.isArray(A))
{
WScript.Echo("True");
}
else
{
WScript.Echo("False");
}

doit renvoyer « True ».
Voir : https://www.w3schools.com/jsref/jsref_isarray.asp

Merci,
Est-ce qu'il y a une déclaration particulière à faire ?
C'est un script destiné à être exécuté par CScript.exe sous Windows, or
l'exemple donné par w3schools parle d'une page web.
Ou à la limite j'écris une application hta, ça serait un moyen de
contournement.
--
Besoin d'un autre système, pas d'un autre gouvernement.
Avatar
Olivier Miakinen
Bonjour,
Le 22/10/2017 18:10, Gloops a écrit :
Peut-être :
if (Array.isArray(A))...

Merci pour la proposition, mais il me dit "Cet objet ne gère pas cette
propriété ou cette méthode.

Une recherche sur isArray sur le web retourne plein de pages disant
que cette fonction n'a pas toujours existé, et expliquant comment
la définir si elle n'existe pas par défaut :
if(!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}
--
Olivier Miakinen
Avatar
Gloops
Le 22/10/2017 à 22:25, Olivier Miakinen a écrit :
Bonjour,
Le 22/10/2017 18:10, Gloops a écrit :
Peut-être :
if (Array.isArray(A))...

Merci pour la proposition, mais il me dit "Cet objet ne gère pas cette
propriété ou cette méthode.

Une recherche sur isArray sur le web retourne plein de pages disant
que cette fonction n'a pas toujours existé, et expliquant comment
la définir si elle n'existe pas par défaut :
if(!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}

OK merci. Apparemment j'étais trop concentré pour voir ça, alors j'ai
fait mon test sur chacune des valeurs plutôt que sur l'appartenance au
tableau.
Maintenant que j'ai remis la machine d'aplomb je pense que je devrais
avoir un moment cet après-midi pour tester ça.
--
Besoin d'un autre système, pas d'un autre gouvernement.
Avatar
Elhwen Dico
Le 21/10/2017 à 23:19, Gloops a écrit :
Bonjour tout le monde,
Quand j'exécute ça, je vois "False", alors que je m'attends à voir "True".
Où est-ce que je me trompe ?
 var A = [".jpg", ".png", ".gif"];
 if(A.isarray)
 {
    WScript.Echo("True");
 }
 else
 {
    WScript.Echo("False");
 }

En fait, il faut utiliser Array.isArray(A)
D'abord, il faut faire attention aux majuscules/minuscules. Elles
sont significatives.
Ensuite,
A.isarray accède à un membre de l'objet A. Ce membre n'existe pas et la
valeur retournée est undefined qui se convertit en false.
Il faudrait plutôt écrire
const exts = ['.jpg', '.png', 'gif'];
if (Array.isArray && typeof Array.isArray === 'function') {
console.log('Array.isArray(exts) = ' + Array.isArray(exts));
}
executé sur node 6.11.3 ->
Array.isArray(exts) = true
Avatar
Gloops
Le 22/10/2017 à 22:25, Olivier Miakinen a écrit :
Bonjour,
Le 22/10/2017 18:10, Gloops a écrit :
Peut-être :
if (Array.isArray(A))...

Merci pour la proposition, mais il me dit "Cet objet ne gère pas cette
propriété ou cette méthode.

Une recherche sur isArray sur le web retourne plein de pages disant
que cette fonction n'a pas toujours existé, et expliquant comment
la définir si elle n'existe pas par défaut :
if(!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}

Effectivement c'est tout bon, et ce qui m'a la plus servi pour détecter
si une chaîne appartient à la liste c'est ça :
if(!Array.indexOf){
Array.indexOf = function(arg1, arg2) {
// arg1 : tableau ; arg2 : chaîne à y chercher
for(var i = 0; i<arg1.length; i++)
{
if(arg1[i] == arg2)return i;
}
return -1;
}
}
--
Besoin d'un autre système, pas d'un autre gouvernement.
Avatar
Gloops
Le 23/10/2017 à 15:02, Elhwen Dico a écrit :
Le 21/10/2017 à 23:19, Gloops a écrit :
Bonjour tout le monde,
Quand j'exécute ça, je vois "False", alors que je m'attends à voir
"True".
Où est-ce que je me trompe ?
  var A = [".jpg", ".png", ".gif"];
  if(A.isarray)
  {
     WScript.Echo("True");
  }
  else
  {
     WScript.Echo("False");
  }

  En fait, il faut utiliser Array.isArray(A)
  D'abord, il faut faire attention aux majuscules/minuscules. Elles
sont significatives.
  Ensuite,
A.isarray accède à un membre de l'objet A. Ce membre n'existe pas et la
valeur retournée est undefined qui se convertit en false.
  Il faudrait plutôt écrire
const exts = ['.jpg', '.png', 'gif'];
if (Array.isArray && typeof Array.isArray === 'function') {
    console.log('Array.isArray(exts) = ' + Array.isArray(exts));
}
executé sur node 6.11.3 ->
Array.isArray(exts) = true

Bonjour, et merci pour la réponse.
Je crois que nous avons un problème de diffusion des newsgroups, le
problème n'est hélas pas neuf.
Olivier Miakinen (Message-ID: <osiusb$lap$) a
signalé le problème des références pas déclarées partout, et de la
nécessité de redonner le code d'une fonction quand elle n'est pas connue.
En réponse j'ai indiqué que j'ai pu exploiter ça, notamment sur la
fonction indexOf (appliquée ici non pas à une chaîne de caractères mais
à un tableau, bien entendu).
https://groups.google.com/forum/#!search/fr.comp.lang.javascript$20tableau$20de$20cha%C3%AEnes$20de$20caract%C3%A8res/fr.comp.lang.javascript/wy1BePdLKxY/BI6Lsu1VBgAJ
--
Besoin d'un autre système, pas d'un autre gouvernement.