从 Reduce 方法合并嵌套数组

Merging Nested Arrays from Reduce Method

提示:创建一个接受数组和回调的函数优先级。回调将 return 为 true 或 false。 priority 将遍历数组并对每个元素执行回调,return 一个新数组,其中所有产生 return 值为 true 的元素在数组中排在第一位,其余的元素排在第二位。

代码:

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']

我无法弄清楚如何合并 'accum' return 的嵌套数组以获得输出 return ['seinfeld', 'sunny' , 'curb', 'rickandmorty', 'friends']。关于如何解决这个问题的任何提示?

您只需flatten返回的结果:

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']