Menu
CoddyTech

Функция: Список задач по статусу

Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy. Урок 48 из 73.

challenge icon

Задание

Легко

Вам предоставлены следующие элементы из предыдущего испытания:

  • Интерфейс Task с полями id (число), title (строка) и status (литеральный тип)
  • Три переменные задач: firstTask, secondTask и thirdTask
  • Функция getTaskInfo
  • Функция addTask
  • Функция changeTaskStatus
  • Массивы initialTasks, updatedTasks, testTasks, progressTasks и completedTasks

Создайте функцию с именем listTasksByStatus, которая принимает два параметра:

  • taskList типа Task[] (массив объектов Task)
  • status типа 'todo' | 'in-progress' | 'done' (статус для фильтрации)

Функция должна:

  • Использовать метод массива filter для возврата нового массива, содержащего только те задачи, которые соответствуют указанному статусу
  • Вернуть отфильтрованный массив задач

Создайте переменную с именем mixedTasks типа Task[], содержащую все три исходные задачи: firstTask, secondTask и thirdTask.

Используйте вашу функцию listTasksByStatus для создания следующих отфильтрованных массивов:

  • Отфильтруйте mixedTasks по статусу 'todo' и сохраните результат в todoTasks
  • Отфильтруйте mixedTasks по статусу 'in-progress' и сохраните результат в inProgressTasks
  • Отфильтруйте mixedTasks по статусу 'done' и сохраните результат в doneTasks

Выведите следующие данные на отдельных строках:

  • Выведите длину mixedTasks
  • Выведите длину todoTasks
  • Выведите длину inProgressTasks
  • Выведите длину doneTasks
  • Вызовите getTaskInfo с первой задачей из todoTasks и выведите результат
  • Вызовите getTaskInfo с первой задачей из inProgressTasks и выведите результат
  • Вызовите getTaskInfo с первой задачей из doneTasks и выведите результат

Попробуйте сами

// Task interface and variables from previous challenges
interface Task {
  id: number;
  title: string;
  status: 'todo' | 'in-progress' | 'done';
}

const firstTask: Task = {
  id: 1,
  title: "Learn TypeScript interfaces",
  status: 'todo'
};

const secondTask: Task = {
  id: 2,
  title: "Build task management app",
  status: 'in-progress'
};

const thirdTask: Task = {
  id: 3,
  title: "Write unit tests",
  status: 'done'
};

function getTaskInfo(task: Task): string {
    return `Task ${task.id}: ${task.title} - ${task.status}`;
}

function addTask(taskList: Task[], title: string): Task[] {
  const newTask: Task = {
    id: taskList.length + 1,
    title: title,
    status: 'todo'
  };
  return [...taskList, newTask];
}

const initialTasks: Task[] = [firstTask, secondTask];

const updatedTasks: Task[] = addTask(initialTasks, "Review code changes");

// Create the changeTaskStatus function
function changeTaskStatus(taskList: Task[], taskId: number, newStatus: 'todo' | 'in-progress' | 'done'): Task[] {
  return taskList.map(task => 
    task.id === taskId ? { ...task, status: newStatus } : task
  );
}

// Create testTasks array
const testTasks: Task[] = [firstTask, secondTask, thirdTask];

// Use changeTaskStatus function
const progressTasks = changeTaskStatus(testTasks, 1, 'in-progress');
const completedTasks = changeTaskStatus(progressTasks, 2, 'done');

// Print the required outputs
console.log(getTaskInfo(testTasks[0]));
console.log(getTaskInfo(progressTasks[0]));
console.log(getTaskInfo(completedTasks[1]));
console.log(testTasks[0].status);
console.log(completedTasks[1].status);

Все уроки раздела Введение в TypeScript

Потренируйтесь самостоятельно: Песочница TypeScript