Bonjour,
j'ai un bug surprennant qui se produit aussi bien sous Firefox que Chrome :

dans un module ES6, je remplis un tableau associatif avec des données issues d'une requête HTTP vers une API REST (donc je ne code pas en dur ni les clés ni les valeurs de ce tableau, ce sont les données retournées par l'API).

J'ai un bout de code de la forme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
let monTableau = new Array();
 
for(let i = 0; i < donneesSources.length; i++) {
    let cle = donneesSources[i].toto;
    let valeur = donneesSources[i].titi;
    monTableau[cle] = valeur;
}
Tout se passe bien, jusqu'à ce que la boucle for tombe sur un cas particulier ou - manque de pot - donneesSources[i].toto vaut la chaîne "length" (ce qui est permis du point de vue de mon API REST).

=> Et là, c'est le drame !

Uncaught RangeError: Invalid array length
On dirait que l'interprêteur considère que j'essaie de faire :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
monTableau.length = valeur;
avec valeur qui n'est pas un entier.

=> Alors qu'en réalité, j'essaie de faire :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
monTableau["length"] = valeur;
ce qui n'est pas du tout la même chose de mon point de vue, mais on dirait que JS ne fait pas la différence.

Comble du bonheur, si j'essaie de faire une recherche Google avec les mots-clés "Javascript", "Array", "length" ou "RangeError" je n'obtiens que des résultats sans aucun rapport avec mon problème.

=> Avez-vous déjà rencontré ce bug ?
=> Est-ce normal que JS ne fasse pas la différence entre monTableau.length et monTableau["length"] ?
=> Avez-vous des astuces pour contourner "proprement" ce problème sachant que je ne choisis pas le contenu de cle ni valeur ?

Merci d'avance pour votre aide