Named Functions : List Operations

by Cristi Salcescu

JavaScript

let todos = createTodos();

//anonymous functions
function getTodos(users){
	return todos.filter(todo => !todo.completed && todo.type === "RE")
    .map(todo => ({
      title : todo.title,
      userName : users[todo.userId].name
    }))
    .sort((todo1, todo2) => todo1.userName.localeCompare(todo2.userName));
}
console.dir(getTodos(createUsers()));

//named functions
function isTopPriority(todo){
  return !todo.completed && todo.type === "RE";
}

function ascByUserName(todo1, todo2){
  return todo1.userName.localeCompare(todo2.userName);
}
  
function getTodos(users){
  function toViewModel(todo){
    return {
      title : todo.title,
      userName : users[todo.userId].name
    }
  }

  return todos.filter(isTopPriority)
              .map(toViewModel).sort(ascByUserName);
}
console.dir(getTodos(createUsers()));

function createUsers(){
  return {
    1 : { name : "User1"},
    2 : { name : "User2"},
    3 : { name : "User3"}
  };
}

function createTodos(){
  return [
    { 
      id : 1,
      type : "NC",
      title : "This is title 1",
      userId : 1,
      completed : true
    },
    { 
      id : 2,
      type : "RE",
      title : "This is title 2",
      userId : 2,
      completed : false
    },
    { 
      id : 3,
      type : "RE",
      title : "This is title 3",
      userId : 3,
      completed : false
    }
  ];
}