Object.entries()
renvoie un tableau dont les éléments sont des tableaux correspondant aux [key, value]
paires de propriétés énumérables trouvées directement sur object
. L'ordre des propriétés est le même que celui donné en bouclant manuellement les valeurs des propriétés de l'objet.
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries#Description
La Object.entries
fonction renvoie presque la sortie exacte que vous demandez, sauf que les clés sont des chaînes au lieu de chiffres.
const obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};
console.log(Object.entries(obj));
Si vous avez besoin que les clés soient des nombres, vous pouvez mapper le résultat sur un nouveau tableau avec une fonction de rappel qui remplace la clé de chaque paire par un numéro forcé.
const obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};
const toNumericPairs = input => {
const entries = Object.entries(input);
return entries.map(entry => Object.assign(entry, { 0: +entry[0] }));
}
console.log(toNumericPairs(obj));
J'utilise une fonction de flèche et Object.assign
pour le rappel de carte dans l'exemple ci-dessus afin de pouvoir le conserver dans une instruction en tirant parti du fait que Object.assign
renvoie l'objet auquel est affecté, et la valeur de retour d'une seule fonction de flèche d'instruction est le résultat de l'instruction.
Cela équivaut à:
entry => {
entry[0] = +entry[0];
return entry;
}
Comme mentionné par @TravisClarke dans les commentaires, la fonction de carte pourrait être raccourcie à:
entry => [ +entry[0], entry[1] ]
Cependant, cela créerait un nouveau tableau pour chaque paire clé-valeur, au lieu de modifier le tableau existant en place, doublant ainsi la quantité de tableaux de paires clé-valeur créés. Bien que le tableau d'entrées d'origine soit toujours accessible, il et ses entrées ne seront pas récupérés.
Maintenant, même si l'utilisation de notre méthode sur place utilise toujours deux tableaux qui contiennent les paires clé-valeur (les tableaux d'entrée et de sortie), le nombre total de tableaux ne change que d'un. Les tableaux d'entrée et de sortie ne sont pas réellement remplis de tableaux, mais plutôt les références aux tableaux et ces références occupent une quantité négligeable d'espace en mémoire.
- La modification de chaque paire clé-valeur sur place entraîne une augmentation négligeable de la mémoire, mais nécessite la saisie de quelques caractères supplémentaires.
- La création d'un nouveau tableau pour chaque paire clé-valeur entraîne le doublement de la quantité de mémoire requise, mais nécessite de taper quelques caractères de moins.
Vous pouvez aller plus loin et éliminer complètement la croissance en modifiant le tableau d'entrées en place au lieu de le mapper à un nouveau tableau:
const obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};
const toNumericPairs = input => {
const entries = Object.entries(obj);
entries.forEach(entry => entry[0] = +entry[0]);
return entries;
}
console.log(toNumericPairs(obj));
NaN
place. Si vous souhaitez utiliser des chaînes comme clés, changez le retour de[Number(key), obj[key]]
en[key, obj[key]]
ou utilisez leObject.entries
comme @Pila suggéré dans leur réponse