2
votes

Convertir une chaîne en entier à l'intérieur d'un tableau en javascript

J'ai un tableau affiché à partir de console.log (temp) comme ceci:

 temp: [{name: "Request A", data: [1]}
       {name: "Request B", data: [12]}
       {name: "Request C", data: [6]}]

Comment faire si je veux changer le format de mon tableau devient comme ceci:

temp = [{name: "Request A", data: "1"}
       {name: "Request B", data: "12"}
       {name: "Request C", data: "6"}]

Veuillez aider les gars ... merci,


3 commentaires

Est-ce JavaScript ou PHP? Veuillez supprimer les balises non pertinentes. Si la question porte sur "générer du JavaScript dans la sortie de page PHP résultante", c'est toujours PHP .


Si vous souhaitez modifier ce tableau, c'est-à-dire ne pas en créer un nouveau, utilisez forEach : jsfiddle.net/awj0sq31


user2864740 c'est utiliser JavaScript man


7 Réponses :


4
votes

Utilisez la fonction map qui renverra un nouveau tableau et parseInt pour convertir la chaîne en nombre

let temp = [{
    name: "Request A",
    data: "1"
  },
  {
    name: "Request B",
    data: "12"
  },
  {
    name: "Request C",
    data: "6"
  }
]
let newTemp = temp.map((item) => {
  return {

    name: item.name,
    data: [parseInt(item.data, 10)]
  }


});
console.log(newTemp)


2 commentaires

Vous pouvez utiliser un opérateur de propagation ... ici en retour, je suppose. return {... item, data: [+ item.data]}


@CodeManiac absolument oui



2
votes

Pour changer le tableau en place, vous pouvez parcourir les éléments de forEach et changer simplement la propriété:

let temp = [ {name: "Request A", data: "1"},
             {name: "Request B", data: "12"},
             {name: "Request C", data: "6"}]

temp.forEach(item => item.data = [+(item.data)])
console.log(temp)


3 commentaires

Peut-être que vous pouvez améliorer avec [+ (item.data)] , après avoir lu: unaire plus est le moyen le plus rapide et préféré de convertir quelque chose en un nombre, car il n'effectue aucune autre opération sur le numéro de ici


Bien que cela fonctionne et aboutisse à un résultat, la programmation fonctionnelle utilisant forEach n'est pas destinée à faire muter le tableau d'origine, mais à générer des effets secondaires. map est la fonction préférée car elle renvoie un nouvel objet, laissant l'original intact.


@DrewReese, c'est bien, mais la question demande spécifiquement comment "changer le format de mon tableau devient comme ça". Pour moi, cela ressemble à une mutation.



0
votes

Vous pouvez le faire en utilisant map

let temp =  [{name: "Request A", data: "1"},{name: "Request B", data: "12"},{name: "Request C", data: "6"}]

let op = temp.map(e=> {
  return {
    ...e,
    data : [+e.data]
  }
})

console.log(op)


1 commentaires

Pourquoi utiliser map et changer le tableau en place?



0
votes

Essayez ceci,

[ { "name": "Request A", "data": [ 1 ] }, { "name": "Request B", "data": [ 12 ] }, { "name": "Request C", "data": [ 6 ] } ]

OUTPUT:

temp = [{name: "Request A", data: "1"},
       {name: "Request B", data: "12"},
       {name: "Request C", data: "6"}];


  let temp1 = temp.map(item => {
    item.data = [parseInt(item.data)]
    return item;
  })

  console.log(temp1);


0 commentaires

0
votes

Essayez

let temp = [{name: "Request A", data: "1"},
       {name: "Request B", data: "12"},
       {name: "Request C", data: "6"}];
       
       
temp.forEach(x=> x.data=[+x.data]);

console.log(JSON.stringify(temp));

temp.forEach(x=> x.data=[+x.data]);


0 commentaires

0
votes

Essayez ceci - J'utilise Array.of pour créer un tableau. + opérateur pour analyser la chaîne dans Array.

temp.map(t => (t.data = Array.of(+t.data), t));


0 commentaires

0
votes

Voici une façon de procéder. Ceci provient du nœud REPL.

> var temp = [{name: "Request A", data: "1"}, {name: "Request B", data: "12"}, {name: "Request C", data: "6"}];
undefined
> temp.forEach(function(e) {
..... e.data = [parseInt(e.data, 10)];
..... });
undefined
> temp
[ { name: 'Request A', data: [ 1 ] },
  { name: 'Request B', data: [ 12 ] },
  { name: 'Request C', data: [ 6 ] } ]
>


0 commentaires