Tengo una función que toma un conjunto de subconjuntos que contienen cadenas de números y devuelve un conjunto con el número más alto de cada subconjunto:
const largestOfFour = arr => { arr.map(e => { e.sort((a,b) => b - a).splice(1); }); return arr.flat(); }Funciona perfectamente en la forma en que está formateado arriba, pero no funciona si está formateado con funciones concurrentes en la matriz pasada. Así:
const largestOfFour = arr => { return arr.map(e => { e.sort((a,b) => b - a).splice(1); }).flat(); }En ese formato, devuelve una matriz de longitud adecuada, pero cada elemento es nulo. ¿Alguien puede ayudarme a entender por qué es eso? Por lo general, no tengo problemas para encadenar funciones concurrentes en una matriz.
No hay concurrencia en JavaScript. Pero la devolución de llamada de su map no devuelve nada (no hay return en el bloque de declaración), por lo que .map() devuelve una matriz de valores indefinidos.
Para evitar que los datos originales se alteren, también evitaría el uso de sort en la matriz original y usaría slice en lugar de splice .
Pero como solo necesita un valor de cada matriz, ni siquiera necesita slice : solo obtenga el valor en el índice 0 (lo que hace que flat sea innecesario):
let a = [ ["1", "2", "3"], ["4", "5", "6"] ]; const largestOfFour = arr => arr.map(e => [...e].sort((a, b) => b - a)[0] ); console.log(largestOfFour(a)); O incluso mejor, simplemente use Math.max , que también realiza la conversión a número:
let a = [ ["1", "2", "3"], ["4", "5", "6"] ]; const largestOfFour = arr => arr.map(e => Math.max(...e)); console.log(largestOfFour(a));El bloque interno (en el mapa) no devuelve nada, lo que da como resultado una matriz de indefinidos. Corregido en el fragmento...
let a = [ ["1", "2", "3"], ["4", "5", "6"] ] const largestOfFour = arr => { return arr.map(e => { return e.sort((a, b) => b - a)[0]; }).flat(); } console.log(largestOfFour(a))