Vamos a crear un ejemplo de JavaScript Spread operator , este operador viene incorporado en JavaScript ES6 y cada día se usa más. Supongamos que tenemos el siguiente array de JavaScript [1,2,3,4,5,6] y queremos obtener el numero mayor. La forma más sencilla de hacer esto es :
var lista=[1,2,3,4,5,6]; var mayor=0; for (var i=0;i<lista.length;i++) { if (mayor<lista[i]) { mayor=lista[i]; } } console.log(mayor);
La pregunta es : ¿ Existe una forma mejor de hacerlo?
JavaScript ES5 , otro enfoque
Con los conocimientos que tenemos de JavaScript clásico podríamos apoyarnos en Math.max y calcular el mayor de dos números.
console.log(Math.max(lista[0], [lista[5]]))
Es un comienzo pero no es lo que queremos , ya que tenemos un array de números , muchas personas optan por escribir algo de este estilo:
console.log(Math.max(lista));
Lamentablemente no funciona ya que el método max no espera un array de elementos.
Sino una lista de elementos separados por comas. El siguiente código si es válido:
console.log(Math.max(1,2,3,4,5,6));
Para solventar nuestro problema podemos usar la función apply de Javascript que ya comentamos en otro artículo y se encarga de invocar una función pasando un objeto y un array de argumentos.
console.log(Math.max.apply(Math,lista));
Lamentablemente este código no es sencillo de entender , pero le necesitamos si queremos calcular el máximo de una forma elegante ya que el método nos pide una lista de argumentos no un array. Vamos a ver como se solventa esto con ES6.
JavaScript Spread Operator
Con ES6 todo es mucho más sencillo ya que podemos pasar a la función el array y usar el JavaScript Spread operator para que nos convierta el array a una lista de argumentos.
console.log(Math.max(...lista));
El funcionamiento será idéntico y mucho más sencillo de entender para el desarrollador y las personas que revisen el código. JavaScript Spread operator nos permite eliminar prácticamente el uso de la función apply que tantos dolores de cabeza da a la gente cuando empieza.
Otros artículos relacionados: JQuery Promise JavaScript Streams JavaScript Bundles