TO DO List

TO DO List ๋งŒ๋“ค๊ธฐ

<div>
    <form class="js-to-do to-do">
        <input class="js-add-to-do to-do__add-to-do" placeholder="Write a To Do here" type="text" />
    </form>
    <ul class="js-list list"></ul>
</div>
const form = document.querySelector(".js-to-do"),
  input = document.querySelector(".js-add-to-do"),
  list = document.querySelector(".js-list");

let toDos = [];

function persistToDos() {
  const stringToDo = JSON.stringify(toDos);
  localStorage.setItem("toDos", stringToDo);
}

function saveToDo(text) {
  const toDoObject = {
    id: toDos.length + 1,
    value: text
  };
  toDos.push(toDoObject);
  persistToDos();
}

function handleDelete(event) {
  const target = event.target;
  const li = target.parentElement;
  const ul = li.parentElement;
  const toDoId = li.id;
  ul.removeChild(li);
  toDos = toDos.filter(function(toDo) { // filter ๋ชจ๋“  ์•„์ดํ…œ์„ ํ†ตํ•ด ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ture์ธ ์•„์ดํ…œ๋งŒ ๊ฐ€์ง€๊ณ  ์ƒˆ๋กœ์šด array๋ฅผ ๋งŒ๋“ฌ
    return toDo.id !== parseInt(toDoId); // ๋ชจ๋“  toDos๊ฐ€ li ์˜ id ์™€ ๊ฐ™์ง€ ์•Š์„๋•Œ 
  });
  persistToDos();
}

function addToDo(text) {
  const toDo = document.createElement("li");
  toDo.className = "toDo";
  toDo.id = toDos.length + 1;
  const deleteBtn = document.createElement("span");
  deleteBtn.innerHTML = "โŒ";
  deleteBtn.className = "toDo__button";
  deleteBtn.addEventListener("click", handleDelete);
  const label = document.createElement("label");
  label.innerHTML = text;
  toDo.appendChild(deleteBtn);
  toDo.appendChild(label);
  list.appendChild(toDo);
  saveToDo(text);
}

function onSubmit(event) {
  event.preventDefault();
  const value = input.value;
  input.value = "";
  addToDo(value);
}

function loadToDos() {
  const loadedToDos = localStorage.getItem("toDos");
  if (loadedToDos !== null) {
    const parsedToDos = JSON.parse(loadedToDos);
    parsedToDos.forEach(function(toDo) { // list์— ์žˆ๋Š” ๋ชจ๋“  ltem์„ ์œ„ํ•œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ด 
      addToDo(toDo.value);
    });
  }
  return;
}

function init() {
  loadToDos();
}

form.addEventListener("submit", onSubmit);

init();

filter

๊ธฐ๋ณธ์„ ์–ธ ๋ฐฉ์‹

let newArray = arr.filter(callbackFunction(element, index, array), thisArg);

์˜ˆ์ œ

const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];

const result = words.filter(word => word.length > 6); // ๋‹จ์–ด๊ฐ€ 6๊ฐœ ์ด์ƒ์ธ element๋ฅผ ์ฐพ์•„์คŒ

console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]
function isBigEnough(value) {
  return value >= 10; // value ๊ฐ’์ด 10๋ณด๋‹ค ํฐ๊ฒƒ 
}

let filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered ๋Š” [12, 130, 44]


// ์ •์ˆ˜ ๋ฐฐ์—ด์—์„œ 5์˜ ๋ฐฐ์ˆ˜์ธ ์ •์ˆ˜๋งŒ ๋ชจ์œผ๊ธฐ
var arr = [4, 15, 377, 395, 400, 1024, 3000];
var arr2 = arr.filter(function (n) {
    return n % 5 == 0; // 5๋กœ ๋‚˜๋ˆด์„๋•Œ ๋‚˜๋จธ์ง€๊ฐ€ 0 ์ด๋˜๋Š”๊ฐ’ 
});
console.log(arr2); // [15, 395, 400, 3000]

forEach

๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰

๊ธฐ๋ณธ์„ ์–ธ ๋ฐฉ์‹

arr.forEach(callback(item, index, array)

์˜ˆ์ œ

const arr = [1,3,5,7,9]; 
// e๋Š” element i๋Š” index์˜ i,a๋Š” array
// ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์€ ์ˆ˜์ •ํ•ด๋„ ๋˜์ง€๋งŒ ์ˆœ์„œ๋Š” ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
 arr.forEach(function(e, i, a) { 
 console.log('์ธ๋ฑ์Šค '+i+ ': ' +e+', ๋ฐฐ์—ด์˜ ์ „์ฒด๋Š”: '+a);
 })


//๊ฒฐ๊ณผ๊ฐ’ 
์ธ๋ฑ์Šค 0: 1, ๋ฐฐ์—ด์˜ ์ „์ฒด๋Š”: 1,3,5,7,9 
์ธ๋ฑ์Šค 1: 3, ๋ฐฐ์—ด์˜ ์ „์ฒด๋Š”: 1,3,5,7,9 
์ธ๋ฑ์Šค 2: 5, ๋ฐฐ์—ด์˜ ์ „์ฒด๋Š”: 1,3,5,7,9 
์ธ๋ฑ์Šค 3: 7, ๋ฐฐ์—ด์˜ ์ „์ฒด๋Š”: 1,3,5,7,9 
์ธ๋ฑ์Šค 4: 9, ๋ฐฐ์—ด์˜ ์ „์ฒด๋Š”: 1,3,5,7,9


const arr = [1,3,5,7,9]; 
arr.forEach((e, i, a)=>{
 if (e === 5) return; // return true, false ๋“  ๊ทธ๋ƒฅ continue 
console.log('์ธ๋ฑ์Šค '+i+ ': ' +e+', ๋ฐฐ์—ด์˜ ์ „์ฒด๋Š”: '+a); 
})

//๊ฒฐ๊ณผ๊ฐ’ 
// ์ธ๋ฑ์Šค 5 ํ•ด๋‹นํ•˜๋Š” ๋‚ด์šฉ ๋นผ๊ณ  ๋ชจ๋‘ ์ถœ๋ ฅ  

Last updated