-
Notifications
You must be signed in to change notification settings - Fork 386
/
index.js
77 lines (69 loc) · 1.5 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
(function () {
'use strict';
// key: タスクの文字列 value: 完了しているかどうかの真偽値
let tasks = new Map();
/**
* TODOを追加する
* @param {string} task
*/
function todo(task) {
tasks.set(task, false);
}
/**
* タスクと完了したかどうかが含まれる配列を受け取り、完了したかを返す
* @param {array} taskAndIsDonePair
* @return {boolean} 完了したかどうか
*/
function isDone(taskAndIsDonePair) {
return taskAndIsDonePair[1];
}
/**
* タスクと完了したかどうかが含まれる配列を受け取り、完了していないかを返す
* @param {array} taskAndIsDonePair
* @return {boolean} 完了していないかどうか
*/
function isNotDone(taskAndIsDonePair) {
return !isDone(taskAndIsDonePair);
}
/**
* TODOの一覧の配列を取得する
* @return {array}
*/
function list() {
return Array.from(tasks)
.filter(isNotDone)
.map(t => t[0]);
}
/**
* TODOを完了状態にする
* @param {string} task
*/
function done(task) {
if (tasks.has(task)) {
tasks.set(task, true);
}
}
/**
* 完了済みのタスクの一覧の配列を取得する
* @return {array}
*/
function donelist() {
return Array.from(tasks)
.filter(isDone)
.map(t => t[0]);
}
/**
* 項目を削除する
* @param {string} task
*/
function del(task) {
tasks.delete(task);
}
module.exports = {
todo: todo,
list: list,
done: done,
donelist: donelist,
del: del
};
})();