3 votes

Comment convertir un tableau de vélocité [x, y, z] en une chaîne de caractères à stocker dans une base de données?

Je cherche à stocker un vecteur de vitesse déclaré comme ceci :

 me.vel = [0, 0, 0];

dans une base de données MySQL. Je suppose que cela doit être converti en chaîne de caractères avant de pouvoir être stocké, mais cela vient du fait que je ne connais pas le type adapté pour le stocker, par exemple : VARCHAR, INT, STRING, etc. (Si cela peut être stocké, faites-moi savoir quel type utiliser car cela serait une solution plus simple et je n'aurais pas à le convertir en une chaîne puis en un vecteur)

J'ai essayé :

 var velocityString = me.vel.join();
 var velocityString = String(me.vel);

mais cela ne semble pas fonctionner.

Comment puis-je convertir ce tableau en une chaîne de caractères ?

Merci, Digimas

2voto

Michael Mior Points 13475

Pourquoi ne pas stocker les données comme trois colonnes distinctes? vel_x, vel_y, vel_z (peut-être un DOUBLE). C'est beaucoup plus propre et vous évitera de devoir convertir constamment entre les chaînes de caractères.

2voto

Christopher Roy Points 131

Ou vous pourriez encoder l'objet en json.

1voto

Morgan ARR Allen Points 2331

Les deux solutions que vous avez essayées devraient fonctionner. J'obtiens "0,0,0" pour les deux. Mais comme Christopher l'a suggéré auparavant, l'encodage JSON fonctionnerait, et à mon avis c'est la meilleure solution. Joining ou stringify créent simplement une liste délimitée par des virgules, ce qui serait acceptable avec un seul exemple comme celui-ci. Mais si vous faites quelque chose de plus complexe, vous risquez de perdre de la signification de vos données (par exemple si votre tableau n'était pas seulement composé de nombres). Donc, si JSON.stringify/parse sont disponibles, utilisez-les, sinon [0,0,0].join(",")/"0,0,0".split(",") fonctionnera.

1voto

KooiInc Points 38845

Si (et je ne pense pas que ce soit le cas) les valeurs de l'élément de vitesse sont fixes, vous pourriez utiliser l'un des types de données MySQL SET ou ENUM pour stocker votre tableau.

Sinon, je choisirais JSON et je stockerais une chaîne encodée en JSON dans un champ VARCHAR (à moins que vous ne stockiez des vitesses lumineuses)1:

/* Stocker : */ JSON.encode([1,2,3]);            //=> "[1,2,3]"
/* Récupérer : */ JSON.parse(velocityFromSQL); //=> [1,2,3]

1 VARCHAR peut contenir jusqu'à 255 caractères

0voto

lawnsea Points 2226

Je ferais var velString = me.vel.join(','); si vous voulez que ce soit une chaîne de caractères.

Pour le convertir à nouveau :

var vel = velString.split(',');

for (var i = 0; i < vel.length; i++) {
    vel[i] = parseFloat(vel[i]);
}

Alternativement, si vous savez que vos utilisateurs utiliseront uniquement des navigateurs modernes :

var vel = velString.split(',').map(parseFloat)

Je ne peux pas commenter sur un type de donnée plus approprié dans MySQL. Il semble que trois colonnes numériques pourraient avoir plus de sens à moins que vous ne prévoyiez d'enregistrer des vitesses de dimension supérieure à l'avenir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X