0
votes

Comment convertir le type de valeur d'une clé dans un objet en JavaScript?

Existe-t-il un moyen de convertir le type de valeur de la clé d'une chaîne en un nombre (la chaîne étant un nombre) à l'intérieur de l'objet?

object={
   key1:"2",
   key2:1,
}

Par exemple, je veux convertir le type de valeur de key1 en nombre, de sorte que la valeur devienne un nombre au lieu d'être sous forme de chaîne. Comment puis-je faire ceci?


1 commentaires

Est-ce que cela répond à votre question? Comment convertir une chaîne en entier en JavaScript?


6 Réponses :


0
votes

Appelez une fonction de conversion et attribuez le résultat à la propriété.

object.key1 = parseInt(object.key1);


3 commentaires

J'utilise angular et j'essayais de convertir une clé d'objet en un nombre à partir d'une chaîne, le problème majeur étant que l'interface sur laquelle l'objet est mappé a la clé sous forme de chaîne tandis que ma clé de données que j'essaie d'attribuer est une chaîne, y a-t-il un moyen de changer le type de l'interface de manière dynamique?


Désolé, je ne sais rien sur Angular.


Si vous avez des contraintes, vous devez les mettre dans la question, pas dans les commentaires. Ajoutez également la balise angulaire à la question afin qu'elle retienne l'attention des experts angulaires. La question que vous avez écrite semble concerner uniquement le JavaScript de base.



2
votes

Vous pouvez parcourir l'objet en boucle avec for in et utiliser Number ()

let object={
  key1:"2",
  key2:1,
}    

for(let key in object){
  object[key] = Number(object[key])
}


1 commentaires

J'utilise angular et j'essayais de convertir une clé d'objet en un nombre à partir d'une chaîne, le problème majeur étant que l'interface sur laquelle l'objet est mappé a la clé sous forme de chaîne tandis que ma clé de données que j'essaie d'attribuer est une chaîne, y a-t-il un moyen de changer le type de l'interface de manière dynamique?



0
votes

Vous pouvez les multiplier par 1.

let object={
   key1:"2",
   key2:1,
}

for(let key in object) {
   object[key] *= 1;
}

console.log(object);


1 commentaires

J'utilise angular et j'essayais de convertir une clé d'objet en un nombre à partir d'une chaîne, le problème majeur étant que l'interface sur laquelle l'objet est mappé a la clé sous forme de chaîne tandis que ma clé de données que j'essaie d'attribuer est une chaîne, y a-t-il un moyen de changer le type de l'interface de manière dynamique?



0
votes

Vous pouvez vérifier conditionnellement la valeur [clé]

 for(let k in object) {
       let keys = object[k]
        if((keys==Number(keys)){
           parseInt(object.key1)
        }
        else {
           process as it is..
        }
    }


1 commentaires

J'utilise angular et j'essayais de convertir une clé d'objet en un nombre à partir d'une chaîne, le problème majeur étant que l'interface sur laquelle l'objet est mappé a la clé sous forme de chaîne tandis que ma clé de données que j'essaie d'attribuer est une chaîne, y a-t-il un moyen de changer le type de l'interface de manière dynamique?



0
votes

Utilisez simplement '+' devant la chaîne pour la convertir en nombre.

object={
   key1:"2",
   key2:1,
};
for(let key of Object.keys(object))  object[key] = +object[key]

console.log(object);


1 commentaires

J'utilise angular et j'essayais de convertir une clé d'objet en un nombre à partir d'une chaîne, le problème majeur étant que l'interface sur laquelle l'objet est mappé a la clé sous forme de chaîne tandis que ma clé de données que j'essaie d'attribuer est une chaîne, y a-t-il un moyen de changer le type de l'interface de manière dynamique?



0
votes

Pour convertir une chaîne en nombre si et seulement si c'est un nombre valide, vous pouvez essayer une fonction de conversion comme

const array = [1,2,3];
Object.keys(array).forEach(
  key=> console.log( "key: %s (%s), value: %s (%s)",
       key, typeof key, array[key], typeof array[key])
);
  • la vérification de type garantit que les valeurs booléennes true et false ne sont pas converties en nombres et empêche également la conversion des valeurs falsey en zéro.
  • l'opérateur + unaire convertit un opérande de chaîne en nombre, ou NaN si la chaîne n'adhère pas à la syntaxe d'un littéral numérique,
  • le == teste si la conversion explicite effectuée par + produit le même résultat qu'une conversion implicite. S'ils sont identiques, retournez le résultat converti, sinon retournez l'argument chaîne.

Démonstration pour convertir les propriétés de chaîne numérique d'un objet en nombres:

const stringToNumber = str =>  typeof str == "string" && +str == str ? +str : str;


const numberProperties = inputObj => {
   const outputObj = {};
   Object.keys( inputObj).forEach( key=> {
      outputObj[ key] = stringToNumber( inputObj[key]);
   });
   return outputObj;
}

console.log( numberProperties( {
   key1: "2",
   key2: 1,
   key0: "0",
   key02: 0,
   key3: false,
   key4: null,
   key9: "09"

}));

        

Mettre à jour (en réponse au commentaire)

Les clés d'objet JavaScript sont des valeurs de chaîne: si un nombre est fourni comme nom de propriété (par exemple, entre crochets lors de l'utilisation de la notation de recherche de tableau), le nombre est automatiquement converti en une chaîne pour être utilisé comme nom de propriété.

La réponse courte à la question, lorsqu'elle est interprétée littéralement, est "non, vous ne pouvez pas convertir les valeurs clés d'un objet, qui sont des chaînes, en nombres dans la liste des noms de propriétés de l'objet".

À titre d'exemple, les clés d'un objet Array sont des chaînes:

const stringToNumber = str =>  typeof str == "string" && +str == str ? +str: str;


1 commentaires

J'utilise angular et j'essayais de convertir une clé d'objet en un nombre à partir d'une chaîne, le problème majeur étant que l'interface sur laquelle l'objet est mappé a la clé sous forme de chaîne tandis que ma clé de données que j'essaie d'attribuer est une chaîne, y a-t-il un moyen de changer le type de l'interface de manière dynamique?