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

383
Views
Este código JS encuentra el índice del valor más alto en una matriz, pero ¿cómo funciona?

La línea de código en cuestión:

 let largest = arr.reduce((a,v,i) => v > a[1] ? [i,v] : a, [-1,0]);

Estoy confundido principalmente por esta parte a, [-1,0] , no entiendo esta sintaxis. ¿Qué es a hacer antes de una coma?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Así es como se ve con gran parte de la taquigrafía expandida:

 const reducer = (accumulator, currentValue, index) => { if (currentValue > accumulator[1]) { return([index, currentValue]) } else { return(accumulator) } } let largest = accumulator.reduce(reducer, [-1, 0])

Lo que está sucediendo:

Array.prototype.reduce() tiene dos argumentos, la función de devolución de llamada y el valor inicial. De ahí viene el [-1, 0] , ese es el "valor inicial" que se pasará como el "acumulador" a la función de devolución de llamada en la primera iteración.

La abreviatura más corta para una función en javascript es () => value donde "valor" representa el valor de retorno de la función; no se requieren paréntesis. En este ejemplo, ese valor de retorno es una declaración ternaria: condition ? return if true : return if false . Esencialmente, debido a que están usando una sola línea para producir un solo valor, no se requieren paréntesis ni llaves alrededor de la función (que termina en a ).

La función de devolución de llamada que pasa a Array.reduce() puede tomar tres argumentos (accumulator, currentValue, index) .

La clave aquí está en el valor inicial, que es [index, value] , que realiza un seguimiento de ambos hasta que finaliza la iteración, en cuyo caso solo se devuelve el valor final.

over 4 years ago · Santiago Trujillo Report

0

La matriz que viene después de la coma es un segundo argumento para .reduce() . El código allí es equivalente a

 let largest = arr.reduce( (a,v,i) => { return v > a[1] ? [i,v] : a; }, [-1,0] // second argument );

En la iteración, el acumulador es una matriz compuesta por 2 valores. El valor devuelto por la devolución de llamada se convierte en el nuevo acumulador en la próxima iteración. El valor devuelto en la última iteración se convierte en el resultado de la expresión .reduce() completa: el largest .

Entonces, ¿qué return v > a[1] ? [i,v] : a; lo que hace dentro de una devolución de llamada .reduce() es que pasará por la matriz y encontrará el elemento con la v más alta; una vez que [i, v] de eso se convierte en el acumulador, el acumulador permanecerá como esa matriz hasta que finalice la iteración.

over 4 years ago · Santiago Trujillo Report

0

Esto se entiende más fácilmente si se formaliza y amplía:

 let reducer = (a,v,i) => { if (v > a[1]) return [i,v]; return a }; let largest = arr.reduce(reducer, [-1,0]);

Donde ahora el argumento de la función reductora es bastante claro.

over 4 years ago · Santiago Trujillo 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!