Skip to content

Commit ed101d1

Browse files
committed
[HW-16.10/st-compl] reusing-todo-obj-methods
Reusing "past/todo" obj meth's for "newTasks" obj. Worth noting: - that the task conditions provided are completely unclear. FS-dev: B-3 / JS basic
1 parent 8bfff85 commit ed101d1

File tree

1 file changed

+191
-0
lines changed
  • full-stack-dev/3-js-basic/16-managing-this/16-10-hw-12-reusing-todo-obj-methods

1 file changed

+191
-0
lines changed
Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
// Возьмите объект из предыдущего домашнего задания и последовательно примените все методы его на новый объект:
2+
// const newTask = {
3+
// tasks: [
4+
// {
5+
// id: 1,
6+
// name: 'тест',
7+
// description: 'описание',
8+
// order: 0,
9+
// },
10+
// ],
11+
// };
12+
// Цель: расширить функциональность без изменения исходных методов.
13+
14+
'use strict';
15+
16+
const todo = {
17+
tasks: [],
18+
19+
isValidId(id) {
20+
if (!id || typeof id !== 'number') {
21+
console.error('Ошибка: ID должен быть числом!');
22+
return false;
23+
}
24+
25+
return true;
26+
},
27+
28+
isValidTitle(title) {
29+
if (!title || typeof title !== 'string') {
30+
console.error('Ошибка: Заголовок должен быть непустой строкой!');
31+
return false;
32+
}
33+
34+
return true;
35+
},
36+
37+
isValidPriority(priority) {
38+
if (!priority || typeof priority !== 'number') {
39+
console.error('Ошибка: Приоритет должен быть числом!');
40+
return false;
41+
}
42+
43+
return true;
44+
},
45+
46+
formatTitle(title) {
47+
return title.trim()[0].toUpperCase() + title.trim().slice(1).toLowerCase();
48+
},
49+
50+
getTaskList() {
51+
return this.tasks;
52+
},
53+
54+
addTask(title, priority) {
55+
if (!this.isValidTitle(title) || !this.isValidPriority(priority)) {
56+
return false;
57+
}
58+
59+
const formattedTitle = this.formatTitle(title);
60+
const maxId = this.tasks.reduce(
61+
(max, task) => (task.id > max ? task.id : max),
62+
0
63+
);
64+
const nextId = maxId + 1;
65+
66+
this.tasks.push({ title: formattedTitle, id: nextId, priority });
67+
68+
return true;
69+
},
70+
71+
deleteTask(id) {
72+
if (!this.isValidId(id)) {
73+
return false;
74+
}
75+
76+
const index = this.tasks.findIndex((task) => task.id === id);
77+
78+
if (index === -1) {
79+
console.error(`Задача с ID ${id} не найдена!`);
80+
return false;
81+
}
82+
83+
this.tasks.splice(index, 1);
84+
85+
return true;
86+
},
87+
88+
updateTask(id, title = 'без изменений', priority = -1) {
89+
if (!this.isValidId(id)) {
90+
return false;
91+
}
92+
93+
if (!this.isValidTitle(title) || !this.isValidPriority(priority)) {
94+
return false;
95+
}
96+
97+
const task = this.tasks.find((task) => task.id === id);
98+
99+
if (!task) {
100+
console.error(`Задача с ID ${id} не найдена.`);
101+
return false;
102+
}
103+
104+
if (title !== 'без изменений') {
105+
task.title = this.formatTitle(title);
106+
}
107+
108+
if (priority !== -1) {
109+
task.priority = priority;
110+
}
111+
112+
return true;
113+
},
114+
115+
sortTask() {
116+
// return [...this.tasks].sort(...); // если нужна отсортированная копия
117+
return this.tasks.sort((a, b) => a.priority - b.priority);
118+
},
119+
};
120+
121+
// новый объект
122+
const newTask = {
123+
tasks: [
124+
{
125+
id: 1,
126+
name: 'тест',
127+
description: 'описание',
128+
order: 0,
129+
},
130+
],
131+
};
132+
133+
newTask.isValidId = todo.isValidId;
134+
newTask.isValidTitle = todo.isValidTitle;
135+
newTask.isValidPriority = todo.isValidPriority;
136+
newTask.formatTitle = todo.formatTitle;
137+
138+
const getNewTaskList = todo.getTaskList.call(newTask);
139+
console.log(getNewTaskList); // [ { id: 1, name: 'тест', description: 'описание', order: 0 } ]
140+
141+
const addNewTask = todo.addTask.call(newTask, 'Помыть окна', 3);
142+
const addNewTask2 = todo.addTask.call(newTask, 'Поиграть в PS', 2);
143+
console.log(newTask.tasks);
144+
/*
145+
[
146+
{ id: 1, name: 'тест', description: 'описание', order: 0 },
147+
{ title: 'Помыть окна', id: 2, priority: 3 },
148+
{ title: 'Поиграть в ps', id: 3, priority: 2 }
149+
]
150+
*/
151+
152+
const deleteNewTask = todo.deleteTask.call(newTask, 2);
153+
console.log(newTask.tasks);
154+
/*
155+
[
156+
{ id: 1, name: 'тест', description: 'описание', order: 0 },
157+
{ title: 'Поиграть в ps', id: 3, priority: 2 }
158+
]
159+
*/
160+
161+
const updateNewTask = todo.updateTask.call(newTask, 1, 'Погулять с собакой', 3);
162+
console.log(newTask.tasks);
163+
/*
164+
[
165+
{
166+
id: 1,
167+
name: 'тест',
168+
description: 'описание',
169+
order: 0,
170+
title: 'Погулять с собакой',
171+
priority: 3
172+
},
173+
{ title: 'Поиграть в ps', id: 3, priority: 2 }
174+
]
175+
*/
176+
177+
const sortNewTask = todo.sortTask.call(newTask);
178+
console.log(newTask.tasks);
179+
/*
180+
[
181+
{ title: 'Поиграть в ps', id: 3, priority: 2 },
182+
{
183+
id: 1,
184+
name: 'тест',
185+
description: 'описание',
186+
order: 0,
187+
title: 'Погулять с собакой',
188+
priority: 3
189+
}
190+
]
191+
*/

0 commit comments

Comments
 (0)