Aviso: Cree una prioridad de función que acepte una matriz y una devolución de llamada. La devolución de llamada devolverá verdadero o falso. La prioridad iterará a través de la matriz y realizará la devolución de llamada en cada elemento, y devolverá una nueva matriz, donde todos los elementos que arrojaron un valor de retorno de verdadero vienen primero en la matriz, y el resto de los elementos vienen en segundo lugar.
CÓDIGO:
function prioritize(array, callback) { return array.reduce((accum, item) => { if (callback(item)) { accum[0].push(item) } else { accum[1].push(item) } return accum; }, [[], []]) } // Uncomment these to check your work! function startsWithS(str) { return str[0].toLowerCase() === 's'; } //boolean, should be true or false const tvShows = ['curb', 'rickandmorty', 'seinfeld', 'sunny', 'friends'] // array console.log(prioritize(tvShows, startsWithS)); // should log: ['seinfeld', 'sunny', 'curb', 'rickandmorty', 'friends']Tengo problemas para descifrar cómo fusionar la matriz anidada que 'accum' regresa para que la salida regrese ['seinfeld', 'sunny', 'curb', 'rickandmorty', 'friends']. ¿Algún consejo sobre cómo solucionar esto?
Solo tienes que aplanar el resultado devuelto:
function prioritize(array, callback) { return array.reduce((accum, item) => { if (callback(item)) { accum[0].push(item) } else { accum[1].push(item) } return accum; }, [[], []]).flat(); } // Uncomment these to check your work! function startsWithS(str) { return str[0].toLowerCase() === 's'; } //boolean, should be true or false const tvShows = ['curb', 'rickandmorty', 'seinfeld', 'sunny', 'friends'] // array console.log(prioritize(tvShows, startsWithS)); // should log: ['seinfeld', 'sunny', 'curb', 'rickandmorty', 'friends']