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/

1voto

Chittrang Mishra Points 141

Avons-nous besoin de quelque chose comme ça ?

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

Console : Objet :

1 : "une valeur"

0voto

Shivam Sharma Points 183

Je pense que vous pouvez faire ce qui suit si vous voulez utiliser la chose ci-dessus pour y accéder comme un numéro, j'ai fait la même chose et ça a marché.

var myObj = {"0":"a","1":"b","CNT":2};
$.each(myObj,function(key,value){
     if(isNaN(parseInt(key))){
          return true; //continue;
     }
     //Code to perform operation
}

Cela ne fonctionne que si la touche ne commence pas par un caractère numérique, sinon elle sera convertie en un nombre. Voir l'exemple suivant :

parseInt("45kjghk") === 45

J'ai utilisé jQuery ici


Mis à jour :

var myObj = {"0":"a","1":"b","CNT":2};
$.each(myObj,function(key,value){
     if(isNaN(parseInt(key)) || (key.length !== parseInt(key).toString().length) ){
          return true; //continue;
     }
     //Code to perform operation
}

Cela peut permettre de surmonter le problème susmentionné. S'il vous plaît, suggérez une meilleure solution si elle est disponible et le problème avec cette réponse s'il y en a.

-1voto

Thomas Orion Points 49

Par Mozilla : [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread\_syntax [Écart](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax%5BSpread) syntaxe] 1

let obj1 = { foo: 'bar', x: 42 };
let obj2 = { foo: 'baz', y: 13 };
const merge = ( ...objects ) => ( { ...objects } );

let mergedObj1 = merge (obj1, obj2);
// Object { 0: { foo: 'bar', x: 42 }, 1: { foo: 'baz', y: 13 } }

let mergedObj2 = merge ({}, obj1, obj2);
// Object { 0: {}, 1: { foo: 'bar', x: 42 }, 2: { foo: 'baz', y: 13 } }

Il suffit de commander les articles à l'avance et vous devriez obtenir le résultat souhaité.

Donc pour votre cas :

const merge = (...objects) => ({...objects});

//An object with numeric keys
const values = ["a value", "another value", "and another value"];

let merged = merge(...values);

console.log(merged);

-2voto

Javid Ahmad Points 1

Vous pouvez essayer ceci :

arr = {}
function f(a,b,c) {
      arr = arguments
}
f("*","#","_")
console.log(arr)
//returns Object { 0: "*", 1: "#", 2: "_" }```

-4voto

William Niu Points 11411

En JavaScript, les chaînes numériques et les nombres sont interchangeables, donc

myObject[1] == myObject['1']

Si vous voulez vraiment que le nombre soit la clé d'un objet, vous pouvez utiliser un tableau (c'est-à-dire créé avec la commande new Array() o [] ).

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