Object.entries()
retorna uma matriz cujos elementos são matrizes correspondentes aos [key, value]
pares de propriedades enumeráveis encontrados diretamente object
. A ordem das propriedades é a mesma que a especificada repetindo manualmente os valores das propriedades do objeto.
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries#Description
A Object.entries
função retorna quase a saída exata que você está solicitando, exceto que as teclas são cadeias de caracteres em vez de números.
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));
Se você precisar que as chaves sejam números, poderá mapear o resultado para uma nova matriz com uma função de retorno de chamada que substitua a chave em cada par por um número coagido a ela.
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));
Eu uso uma função de seta e Object.assign
para o retorno de chamada do mapa no exemplo acima, para que eu possa mantê-lo em uma instrução, aproveitando o fato de Object.assign
retornar o objeto ao qual está sendo atribuído, e o valor de retorno de uma única função de seta de instrução é o resultado da instrução.
Isso é equivalente a:
entry => {
entry[0] = +entry[0];
return entry;
}
Conforme mencionado por @TravisClarke nos comentários, a função de mapa pode ser reduzida para:
entry => [ +entry[0], entry[1] ]
No entanto, isso criaria uma nova matriz para cada par de valores-chave, em vez de modificar a matriz existente, dobrando a quantidade de matrizes de pares de valores-chave criadas. Enquanto a matriz de entradas originais ainda estiver acessível, ela e suas entradas não serão coletadas como lixo.
Agora, mesmo que o uso do método local ainda use duas matrizes que contêm os pares de valores-chave (as matrizes de entrada e saída), o número total de matrizes muda apenas uma. As matrizes de entrada e saída não são realmente preenchidas com matrizes, mas as referências a matrizes e essas referências ocupam uma quantidade insignificante de espaço na memória.
- A modificação de cada par de valores-chave no local resulta em uma quantidade insignificante de aumento de memória, mas requer a digitação de mais alguns caracteres.
- Criar uma nova matriz para cada par de valores-chave resulta na duplicação da quantidade de memória necessária, mas requer digitação de alguns caracteres a menos.
Você poderia dar um passo adiante e eliminar completamente o crescimento modificando a matriz de entradas no local, em vez de mapear para uma nova matriz:
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
. Se você quiser usar cordas como suas chaves, altere o retorno de[Number(key), obj[key]]
a[key, obj[key]]
ou usar oObject.entries
como @Pila sugeriu em sua resposta