Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

110
Vistas
Cuente las ocurrencias de números en una matriz y clasifíquelos

Quiero encontrar ocurrencias de número en una matriz y luego mostrar los números y las ocurrencias con los números ordenados en orden ascendente como este:

 let arr = [9,-10,2,9,6,1,2,10,-8,-10,2,9,6,1]; // {'-10': 2, '-8': 1, '1': 2, '2': 3, '6': 2, '9': 3, '10': 1}

Encontré las ocurrencias de cada número en la matriz almacenándolas en un objeto. Cuando probé console.log el numCount, todos los números se ordenaron en orden ascendente excepto los números negativos.

 /*Find occurrences*/ let numCount = {}; for(let num of arr){ numCount[num] = numCount[num] ? numCount[num] + 1 : 1; } console.log(numCount); //{ '1': 2, '2': 3, '6': 2, '9': 3, '10': 1, '-10': 2, '-8': 1 }

Busqué cómo ordenar objetos y parece que la forma de hacerlo es almacenarlos en una matriz y luego ordenarlos. Así que eso es lo que probé:

 /*Store them in array and then sort it*/ let sortedArray = []; for(let item in numCount){ sortedArray.push([item, numCount[item]]); } sortedArray.sort(function(a,b){ return a[0] - b[0]; }); /* console.log(sortedArray); [ [ '-10', 2 ], [ '-8', 1 ], [ '1', 2 ], [ '2', 3 ], [ '6', 2 ], [ '9', 3 ], [ '10', 1 ] ] */

Se suponía que el siguiente método los mostraba en un objeto ordenado en orden ascendente, pero cuando lo probé, los mostró con los números negativos al final de ese objeto, como al principio. Así que esta es la parte donde estoy atascado.

 let sortedObject = {}; sortedArray.forEach(function(item){ sortedObject[item[0]] = item[1]; }) /*console.log(sortedObject); { '1': 2, '2': 3, '6': 2, '9': 3, '10': 1, '-10': 2, '-8': 1 } */

Código completo:

 let arr = [9,-10,2,9,6,1,2,10,-8,-10,2,9,6,1]; /*Find occurrences*/ let numCount = {}; for(let num of arr){ numCount[num] = numCount[num] ? numCount[num] + 1 : 1; } /*Store them in array and then sort it*/ let sortedArray = []; for(let item in numCount){ sortedArray.push([item, numCount[item]]); } sortedArray.sort(function(a,b){ return a[0] - b[0]; }); let sortedObject = {}; sortedArray.forEach(function(item){ sortedObject[item[0]] = item[1]; }) console.log(sortedObject);

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Hay reglas sobre cómo se ordenan las propiedades/claves en un objeto y se ordenan de manera confiable si conoce las reglas.

Si la propiedad es similar a un número positivo ( de hecho, todas las propiedades son cadenas incluso si parecen números ), se ordenará según corresponda. si no, se ordenará por orden de inserción. pero, ¿cómo determina el objeto si el valor de una propiedad es similar a un número o no?

Considere la clave '9' : primero se convierte en un número que es 9. Dado que es positivo, se vuelve a convertir en una cadena que es '9'. igual que el primer valor. por lo tanto, se considera como un número positivo para un número positivo.

Considere la clave '-10' : primero se convierte en un número que es -10.

como no es positivo, se considera como una cadena... y lo mismo para el resto.

Por lo tanto, ahora está claro que la clasificación de propiedades similares a números positivos no era realmente necesaria en absoluto. ya sea que la matriz de entrada esté ordenada o no, el resultado será el mismo y el orden estará determinado por las reglas.

solución:

Considere la clave '09' : primero se convierte en un número que es 9. Dado que es positivo, se vuelve a convertir en una cadena que es '9'. no es lo mismo que el primer valor. por lo que se considera como una cadena.

Así que pongamos un '0' antes de cada número positivo y convirtámoslo en una cadena después de ordenar.

 sortedArray.forEach(function(item){ let key = parseInt(item[0])>0 ? '0'+item[0] : item[0] sortedObject[key] = item[1]; }) //{ "-10": 2, "-8": 1, 01: 2, 02: 3, 06: 2, 09: 3, 010: 1 }

tenga en cuenta que el comportamiento de parseInt para números como 010 es diferente, ya que asume que son octales.

Otra y mejor solución es usar map, lea más sobre Maps y sus diferencias con Objects aquí .

about 4 years ago · Juan Pablo Isaza Denunciar

0

Posiblemente, un Mapa le permitiría hacer lo que quiera hacer con el objeto mientras le permite establecer un orden clave.

 let arr = [9,-10,2,9,6,1,2,10,-8,-10,2,9,6,1]; /*Find occurrences*/ let numCount = new Map(); for(let num of arr){ numCount.set(num, (numCount.get(num) ?? 0) + 1); } let sortedMap = new Map([...numCount.entries()].sort((a, b) => a[0] - b[0])); console.log(sortedMap.get(-10)); console.log(...sortedMap.keys()); console.log(...sortedMap.values());

about 4 years ago · Juan Pablo Isaza Denunciar

0

Las propiedades de los objetos no están ordenadas de manera confiable y la forma en que se muestra un objeto dependerá de la implementación particular de console.log .

Si, curiosamente, es solo una cuestión de visualización, entonces podría usar, por ejemplo

 const sortedArray = [[-10, 2], [-8, 1], [1, 2], [2, 3], [6, 2], [9, 3], [10, 1]]; let result = `{${sortedArray.map(el => `'${el[0]}': ${el[1]}`).join(', ')}}`; console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda