4
votes

Comment convertir un tableau de chaînes en float en Javascript

J'ai ce tableau et il est formaté comme chaîne :

6,35,2,72,11,79,183,25

Le problème est que lorsque je le convertis en nombres (en utilisant - sans guillemets) array.match (/ \ d + / g) .map (nombre) || 0;

il change les points utilisés pour les décimales en virgules. Ensuite, je me retrouve avec ce nouveau tableau:

['6.35', '2.72', '11.79', '183.25']

Donc, au lieu d'avoir 4 éléments à l'intérieur du tableau, j'ai maintenant 8 éléments, car mes délimiteurs sont des virgules. P >

Des idées sur la façon dont je peux convertir ce tableau sans remplacer les points?


8 commentaires

La virgule est le délimiteur utilisé dans le graphique Js. Je dois donc les conserver, sans remplacer les points.


Eh bien, les réponses ci-dessous sont les mêmes que la réponse ici , il vous suffit de vous améliorer dans la recherche de réponses plutôt que de demander des doublons des questions.


Le lien @IslamElshobokshy permet de convertir un tableau en entier. Ma question est pour le flotteur et sans remplacer les points. C'est différent.


Un float est un float, le point n'a rien à voir avec lui, lorsque vous utilisez Number pour convertir la chaîne en Numbers, vous obtenez des float, si Chart JS n'accepte pas les float, c'est un autre problème et vous devez reformuler votre question afin nous pouvons mieux vous aider


@jo_va Chart Js accepte les flottants. Il utilise des virgules comme délimiteurs et des points nativement pour les décimales.


Les réponses ci-dessous renvoient des points, mais si elles utilisent des virgules comme délimiteurs, elles utilisent des chaînes et non des nombres réels. Aucune des réponses ci-dessous n'a fonctionné pour vous? Si ce n'est pas le cas, votre question n'est pas vraiment la question que vous devez poser et vous devez rechercher le problème réel.


Voir ceci: stackoverflow.com/a/26567557/9325419


Comme l'a dit @Islam Elshobokshy, en convertissant en nombres, vous n'obtiendrez que des points, si vous voulez avoir des virgules, alors vous n'avez pas d'autre choix que de vous en tenir aux chaînes


7 Réponses :


3
votes

Vous pouvez simplement mapper des nombres.

var array = ['6.35', '2.72', '11.79', '183.25'],
    numbers = array.map(Number);

console.log(numbers);


4 commentaires

Si j'utilise uniquement cette méthode, alors Chart Js (où le tableau est utilisé) ne rend pas le graphique. En outre, cette méthode elle-même, pour une raison quelconque, échoue, donc je ne peux même pas imprimer le résultat.


il n'est pas nécessaire de convertir le contenu numérique en littéraux numériques en JavaScript, car c'est pourquoi nous aimons JavaScript - il est vivant! Si nous les servons bien, je le ferai pour nous.


@JulioSouto, la question est, pourquoi n'accepte pas chartjs ce tableau? avez-vous essayé un tableau avec juste des nombres?


@NinaScholz Je l'ai fait avec succès avec des entiers. Le problème était lié au flottement.



5
votes

En supposant que vous ayez un tableau au format chaîne, vous pouvez utiliser l'expression régulière suivante pour faire correspondre toutes les décimales, puis utiliser .map(Number)

const str = "['6.35', '2.72', '11.79', '183.25']",
      array = str.match(/\d+(?:\.\d+)?/g).map(Number)

console.log(array)


3 commentaires

que diriez-vous du nombre moins?


@sonictl ajoute un signe moins -? au début de l'expression régulière: /-?\d+(?:\.\d+)?/


Merci beaucoup! Je suggère de modifier la réponse dans le commentaire comme regex pour l'autoriser pour tous les nombres réels. puisque le «flottant» dans cette question doit contenir tous les nombres réels.



0
votes

Mappez sur le tableau avec la fonction Number , il gérera la conversion:

console.log(['6.35', '2.72', '11.79', '183.25'].map(Number));

Si vous voulez des virgules dans vos nombres, vous devez vous en tenir à une représentation sous forme de chaîne.

Voir ceci SO réponse à un problème similaire avec ChartJS.


1 commentaires

Comme indiqué ci-dessus, si j'utilise uniquement cette méthode, alors Chart Js (où le tableau est utilisé) ne rend pas le graphique. En outre, cette méthode elle-même, pour une raison quelconque, échoue, donc je ne peux même pas imprimer le résultat.



1
votes

var num = ['6.35', '2.72', '11.79', '183.25'].map(num => Number(num));

console.log(num);

Number () mdn


1 commentaires

Les gars, cela me donne l'erreur suivante: TypeError: window.column_b.map n'est pas une fonction. (Dans 'window.column_b.map (i => Number (i))', 'window.column_b.map' n'est pas défini). PS: "window.column_b" car c'est une variable globale déclarée en dehors de la fonction.



0
votes
var arr = ["6,35,2,72,11,79,183,25"]
var result=arr.map(Number);
result[]
typeof(result[])

0 commentaires

1
votes

Analyser les valeurs à float:

var array = ['6.35', '2.72', '11.79', '183.25']
var x = 0;
var len = array.length
while(x < len){ 
    array[x] = parseFloat(array[x]); 
    x++
}

console.log(array)

Si pour une raison quelconque .map () ne fonctionne pas, utilisez simplement une boucle:

console.log(['6.35', '2.72', '11.79', '183.25'].map(i => parseFloat(i)));


2 commentaires

Merci, l'Islam pour le temps passé à essayer de le résoudre. J'ai testé la solution présentée par Adiga et cela a fonctionné, j'ai donc marqué comme résolu.


@JulioSouto mon plaisir!



4
votes

\ d ne correspond qu'à des chiffres, c'est l'abréviation de [0-9] . Par exemple, dans 6.35 \ d + correspond à 6 puis à 35 séparément et le point est ignoré. Ce que vous obtenez dans le résultat est un tableau contenant ces correspondances.

Comme suggéré dans d'autres réponses, l'utilisation de correspondance est redondante dans votre cas et vous pouvez utiliser:

array.map(Number) 


0 commentaires