2

Prompt: Create a function prioritize that accepts an array and a callback. The callback will return either true or false. prioritize will iterate through the array and perform the callback on each element, and return a new array, where all the elements that yielded a return value of true come first in the array, and the rest of the elements come second.

CODE:

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

I am having trouble figuring out how to merge the nested array that 'accum' returns to have the output return ['seinfeld', 'sunny', 'curb', 'rickandmorty', 'friends']. Any tips on how to go about solving this?

1 Answer 1

1

You just have to flatten the returned result:

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

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.