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

185
Views
Función JS que crea un rango de números (incluido el principio y el final) con un límite en los elementos del rango

Se le asigna un número inicial y final y el número máximo de elementos de salida permitidos. ¿Cómo crearía una matriz de salida con una distribución lo más uniforme posible, sin dejar de incluir el primer y el último punto en la salida?

Firma de función

function generatePoints(startingNumber, endingNumber, maxPoints) {}

Función salida deseada

generatePoints(0, 8, 5) // [0, 2, 4, 6, 8]

Esto es lo que probé hasta ahora
 function generatePoints(startingNumber, endingNumber, maxPoints) { const interval = Math.round((endingNumber - startingNumber) / maxPoints) let count = 0 let counter = 0 let points = [] while(count < maxPoints - 1) { points.push(counter) counter+=interval count++ } points.push(endingNumber) return points }

Técnicamente, esto crea el resultado correcto para el caso simple, pero se queda corto cuando se compara con la mayoría de los otros casos extremos debido al hecho de que detengo una iteración antes y luego agrego el punto final. Estoy pensando que la mejor manera de hacer esto (para crear una mejor distribución) es construir desde el centro de la matriz hacia afuera, en lugar de construir desde el inicio de la matriz y luego detener un elemento temprano y agregar el número final.

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

0

Tenga en cuenta esto:

 0 2 4 6 8 +-----+ +-----+ +-----+ +-----+ ABCD

Al dividir nuestro rango en intervalos con 5 puntos, incluidos los puntos finales, tenemos solo cuatro intervalos. Siempre será uno menos que el número de puntos. Podemos dividir nuestro rango de manera uniforme en estos rangos más pequeños, simplemente agregando continuamente el ancho de un intervalo, que es solo (endingNumber - startingNumber) / (maxPoints - 1) . Podemos hacerlo así:

 const generatePoints = (startingNumber, endingNumber, maxPoints) => Array .from ( {length: maxPoints}, (_, i) => startingNumber + i * (endingNumber - startingNumber) / (maxPoints - 1) ) console .log (generatePoints (0, 8, 5))

Simplemente construimos una matriz de la longitud correcta, usando el parámetro de índice para contar la cantidad de intervalos más pequeños que estamos usando.

No verificamos errores aquí, y si maxPoints fuera solo 1 , podríamos tener un problema. Pero eso es bastante fácil de manejar como quieras.


Pero hay una preocupación aquí. ¿Por qué el parámetro se llama maxPoints en lugar de points ? Si el número de puntos permitidos es variable, creo que necesitamos más requisitos.

about 4 years ago · Juan Pablo Isaza Report

0

No Math.round(interval) . En cambio Math.round(counter) en ese último momento.

La razón es que si ha agregado k intervalos, el error en lo que está haciendo puede ser de hasta 0.5*k . Pero si redondeas en el último minuto, el error nunca es mayor a 0.5 .

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!