Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

286
Views
Matrices de JavaScript: ¿cómo compacto el exceso de longitud?

Esto puede parecer una pregunta duplicada, pero no asuma esto solo porque se parece a otras, y tenga cuidado con las respuestas fáciles a menos que realmente comprenda las ramificaciones.

Aquí hay un cuadro de diálogo de la consola para demostrar el problema:

 > a = [0,1,2] < >(3) [0,1,2] > a.length < 3 > a[99] = 99 < 99 > a.length < 100 > delete a[99] < true > a.length < 99

Entonces, esta propiedad de longitud de las matrices no parece seguir ninguna especificación razonable. Los elementos dispersos finales deben compactarse, pero no lo son.

Creo que, como resultado, la propiedad de longitud nunca debe usarse en el código, ya que semánticamente no tiene sentido. (En su lugar findLastIndex(() => true) debe usarse en cualquier lugar donde un programador ingenuo usaría previamente length ).

Sé cómo usar las funciones elegantes forEach, some, every, find, filter, map y reduce. Y sé que el filtro no preserva la escasez. Puedo usar reduce para hacer un mapa que puede soltar elementos o un filtro que conserva la escasez.

¿Cómo podemos restablecer la propiedad de longitud de la matriz a algo razonable sin copiar la matriz?

Es posible que no haya ninguna respuesta en absoluto, o más bien, la respuesta puede ser "no hay manera y la propiedad de longitud de matriz es esencialmente insignificante".

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Dado que nada en la especificación de JavaScript dice que la length debe ser exactamente uno más alta que el último índice, su demanda no es razonable. En el uso común, las matrices densas superan abrumadoramente en número a las dispersas. Dado que JavaScript no mantiene los índices en una estructura ordenada, averiguar qué índice es el último cada vez que cambia el contenido de la matriz incurriría en una pérdida de rendimiento en una serie de casos en los que no se necesita este invariante más fuerte.

Si realmente necesita recortar una matriz para excluir los no elementos finales, es bastante fácil de hacer: busque el último índice válido y reduzca la matriz usted mismo:

 const a = [0,1,2] a[99] = 99 delete a[99] a.length = a.findLastIndex(i => i in a) + 1; console.log(a); // [1, 2, 3] console.log(a.length); // 3

¿Puede ser lento, en caso de que la length sea grande? Sí. Precisamente por eso este cálculo no se hace por defecto.

EDITAR: findLastIndex no está presente en todos los navegadores, es posible que se requiera una solución alternativa o un polyfill.

EDIT2: mejor aún, se puede emplear reduce , que no llama al predicado de los índices ausentes (y también está presente en todos los navegadores actuales):

 const a = [0,1,2] a[99] = 99 delete a[99] a.length = a.reduce((l, x, i) => i, 0) + 1; console.log(a); // [1, 2, 3] console.log(a.length); // 3

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!