DAY13 - [JS] 重新改写ToDoList

今日文章目录

  • 需求说明
  • 事前准备
  • 重点说明
  • 参考资料

DAY12练习ToDoList分类项目,遇到重复点击完成钮,资料无法同时在三种清单上同时更新。
昨晚想了一下,决定重新调整写法。所以今天一样是ToDoList奋斗日记

需求说明

  • 三种页签清单:全部、未完成、已完成。
  • 每个清单内的li都要可以重复点击完成钮,并同时更新对应分类。
  • 新增 优先清单 标签:1、2、3

事前准备

  • 清单资料都会依据阵列内的资料,去 render 视觉画面。
    const listData = [];         // 全部清单
    let unfinishedListData = []; // 未完成清单
    let finishedListData = [];   // 已完成清单
  • 规划存放资料的架构如下:
const listData =[
    {
        id: 1, // 这次练习是用 Math.random() 产生随机数,但其实还是有可能重复。
        value: "Learn JS",
        status: "unfinished", // 筛选分类清单依据
        priority: 1, // 调整排列顺序依据
    },
    ...
];
  • 步骤记录:
    1.拿到的资料,会先建立上方对应资料
    2.push加入listData
    3.依照 priority重新排列listData
    3.依据listData,筛选(filter)出未完成、已完成资料
    4.render 画面
    5.监听deleteBtn,参数传入:该li。点击执行以下动作:
    - 找到目标项目
    - 修改资料: listData
    - 修改样式: toDoList
    - 依据 修正後的 listData,重新筛选未完成、已完成资料
    - re-render 画面
  • codepen 练习:https://codepen.io/chen-chens/pen/ExXXZMW?editors=0010
  • 显示效果:
    显示效果
  • 依照目前的写法,不管是在哪一页页签取消或点击完成钮,都会同步更新到相对应的清单分类中。也会将优先顺序较高的排列在最上面。

重点说明

  • sort(compareFunction):
    • 作用对象:阵列
    • 用途:依照比对要求做排列。
    • 参数:compareFunction(optional),函式会有两个参数代表作用阵列项目,依照比较内容做排序。
    • 返回值:修改後的原阵列
  • filter((element, index, targetArray)=>{}):
    • 作用对象:阵列
    • 用途:依照测试函式,筛选出符合条件的所有元素。
    • 参数:一测试函式,该函式包含三个参数:
      • element:目前作用元素
      • index(optional):目前作用元素索引
      • targetArray:作用阵列
    • 返回值:包含符合条件的***全新阵列***;如果没有一个符合,返回空阵列[]
  • find((element, index, targetArray)=>{}):
    • 作用对象:阵列
    • 用途:依照测试函式,筛选出第一个符合条件的元素。
    • 参数:一测试函式,该函式包含三个参数:
      • element:目前作用元素
      • index(optional):目前作用元素索引
      • targetArray(optional):作用阵列
    • 返回值:如果有符合元素,返回第一个符合元素;如果没有一个符合,返回 undefined
  • findIndex((element, index, targetArray)=>{}):
    • 作用对象:阵列
    • 用途:依照测试函式,筛选出第一个符合条件的元素索引。
    • 参数:一测试函式,该函式包含三个参数:
      • element:目前作用元素
      • index(optional):目前作用元素索引
      • targetArray(optional):作用阵列
    • 返回值:如果有符合元素,返回第一个符合元素索引;如果没有一个符合,返回 -1

参考资料


明日预告:


<<:  [想试试看JavaScript ] 物件

>>:  变数 基础

Day19:终於要进去新手村了-javascript-回圈-break、continue

回圈的概念是满足设定的条件後一直执行设定好的程序码,但是还是有方式可以让回圈强制跳出整个回圈或是跳出...

DAY 17 制作 Nav Bar - Header

整个画面中最先看到的是 header 的 nav bar ,就让我们从这里开始刻吧! 首先在 App...

#11 No-code 之旅 — 在 Next.js 专案中显示 Notion 的资料 ft. Notion SDK

哈罗!昨天使用 SWR 实作了一个小功能,让使用者可以列出某 Github user 的所有公开 r...

[Day 17] 轻量化的梯度提升机 - LightGBM

LightGBM 今日学习目标 LightGBM 与 XGBoost 比较 了解 LightGBM ...

Day 18 ml5.js-2

衔接 Day 16 的 ml5.js 范例,我们可以把辨识流程改成上传图片的形式。 之前的范例使用 ...