160 votes

Existe-t-il un moyen d'utiliser un type numérique comme clé d'objet ?

Il semble que lorsque j'utilise un type numérique comme nom de clé dans un objet, il est toujours converti en chaîne de caractères. Existe-t-il un moyen de le stocker comme un numérique ? La conversion de type normale ne semble pas fonctionner.

Ejemplo:

var userId = 1;
console.log( typeof userId ); // number
myObject[userId] = 'a value';
console.dir(myObject);

Sortie Dir :

{
    '1': 'a value'
}

Ce que je veulent c'est ça :

{
    1: 'a value'
}

Des conseils ?

0 votes

Voir aussi ce commentaire - stackoverflow.com/questions/3633362/

194voto

Matthew Flaschen Points 131723

Non, ce n'est pas possible. La clé sera toujours convertie en chaîne de caractères. Voir Documentation sur les accesseurs de propriétés

Les noms des propriétés doivent être des chaînes de caractères. Cela signifie que les objets qui ne sont pas des chaînes de caractères ne peuvent pas être utilisés comme clés dans l'objet. Tout objet autre qu'une chaîne de caractères, y compris un nombre, est converti en chaîne de caractères par la méthode toString.

var foo = {} undefined

foo[23213] = 'swag' 'swag'

foo { '23213': 'swag' }

typeof(Object.keys(foo)[0]) 'string'

47voto

corvid Points 4912

Dans un objet, non, mais j'ai trouvé Carte extrêmement utile pour cette application. Voici où je l'ai utilisé pour les touches numériques, un événement basé sur les touches.

onKeydown(e) {
  const { toggleSidebar, next, previous } = this.props;

  const keyMapping = new Map([
    [ 83, toggleSidebar ],  // user presses the s button
    [ 37, next          ],  // user presses the right arrow
    [ 39, previous      ]   // user presses the left arrow
  ]);

  if (keyMapping.has(e.which)) {
    e.preventDefault();
    keyMapping.get(e.which)();
  }
}

4 votes

Le 101 de l'élégance Ludumdare entrées ! +1

14voto

Rob Olmos Points 1589

Il semble qu'il s'agisse d'une conception de l'ECMA-262-5 :

Le type Identificateur de propriété est utilisé pour associer un nom de propriété à un Descripteur de propriété. Les valeurs du type Identificateur de propriété sont des paires de la forme (nom, descripteur), où le nom est une chaîne de caractères et le descripteur est une valeur de descripteur de propriété.

Cependant, je ne vois pas de spécification précise à ce sujet dans l'ECMA-262-3. Quoi qu'il en soit, je n'essaierais pas d'utiliser des non chaînes de caractères comme noms de propriétés.

7voto

sadab khan Points 91

Que vous pouvez utiliser, Map si vous voulez un type de données différent pour les clés

const map1 = new Map();

map1.set(1,3)
map1.set('1','string')

// expected output: 3

console.log(map1.get(1)) //output 3;
console.log(map1.get('1')) //output 'string';

5voto

Ayhanexe Points 1

Voici la solution. Veuillez m'indiquer les configurations environnementales si cela ne fonctionne pas.

const screens = {
    "768": "large",
    "200": "small"
}

const keys = Object.keys(screens).map(key => parseInt(key))
                                         // OR Number(key)

console.log(keys) // Output [200, 768]

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