Wes Bos 的原始專案:JS30 Day07
專案目標:
熟悉陣列操作方法:some()、every()、find()、findIndex()、splice()。
此範例瀏覽器不會渲染出畫面,純粹用陣列操作方法來篩選出資料。
資料集
題目給了兩筆資料集,以下共有 5 道題目要從以下兩個資料集中篩選出目標物件資料。
|
|
第一題:people 資料中是否有 19 歲以上的人
本題要從 people 資料集判斷是否有 19 歲以上的人。
some() 方法,會將陣列中的「每一個元素」帶入指定的函式內做判斷,只要有一個以上的元素符合判斷條件,即透過 return 回傳 true,否則回傳 false。
裡頭有一個函式 ( 必填 ) 和一個回傳函式裡的 this 參數 ( 選填 )。
函式內包含三個參數,第一個是每個元素的值 ( 必填 ),第二個是當前元素的索引值 ( 選填 ),第三個是當前的陣列 ( 選填 )。
arr.some(callback[, thisArg])
本題也會運用 getYear() 或 getFullYear() 方法來取得當前的年份
dateObj.getFullYear(); // 返回日期物件的西元年;ex: 2021 年會回傳 2021
本題解法
|
|
第二題:People 資料中是否每個人都19歲以上
every() 方法,可以和 some() 方法一起理解。
every() 方法會將陣列中的「每一個元素」帶入指定的函式內做判斷,全部元素皆符合判斷條件,即透過 return 回傳 true,否則回傳 false。
裡頭有一個函式 ( 必填 ) 和一個回傳函式裡的 this 參數 ( 選填 )。
函式內包含三個參數,第一個是每個元素的值 ( 必填 ),第二個是當前元素的索引值 ( 選填 ),第三個是當前的陣列 ( 選填 )。
arr.every(callback[, thisArg])
本題解法
|
|
第三題:在 comments 資料中找到 id 是 823423 的資料
本題要從 comments 資料集找出 id 是 823423 的資料。
find() 方法會將陣列中的「每一個元素」帶入指定的函式內做判斷,透過 return 回傳第一個通過函式判斷的元素值。否則回傳 undefined。
裡頭有一個函式 ( 必填 ) 和一個回傳函式裡的 this 參數 ( 選填 )。
函式內包含三個參數,第一個是每個元素的值 ( 必填 ),第二個是當前元素的索引值 ( 選填 ),第三個是當前的陣列 ( 選填 )。
arr.find(callback[, thisArg])
find() 方法可以和 filter() 方法一起理解。
find() 方法回傳第一個通過函式判斷的元素值;filter() 方法則回傳通過函式判斷的全部元素值。
本題解法
|
|
第四題:在 comments 資料中找到 id 是 823423 的資料索引值
本題要從 comments 資料集找出 id 是 823423 的資料索引值。
findIndex() 方法會將陣列中的「每一個元素」帶入指定的函式內做判斷,透過 return 回傳第一個通過函式判斷的元素索引值,否則回傳 -1。
裡頭有一個函式 ( 必填 ) 和一個回傳函式裡的 this 參數 ( 選填 )。
函式內包含三個參數,第一個是每個元素的值 ( 必填 ),第二個是當前元素的索引值 ( 選填 ),第三個是當前的陣列 ( 選填 )。
arr.findIndex(callback[, thisArg])
findIndex() 方法和 find() 及 filter() 方法一樣都是通過函式進行判斷,但 findIndex() 回傳的是元素索引值,而非元素本身。
indexOf() 方法,和 findIndex() 一樣是回傳索引值。但 indexOf() 不是通過函式進行判斷,而只是以元素做 === 的嚴格相等判斷,回傳的是第一個通過相等判斷的元素索引值。
本題解法
|
|
第五題:透過第四題找到的索引值,來刪除這筆資料
本題使用第四題找到的索引值,以及 splice() 方法來刪除資料集裡的該筆資料。
splice() 方法可以移除或新增陣列的元素。
包含三個參數,第一個是要移除或要添加資料的位置索引值 ( 必填 ),第二個是要移除的長度 ( 選填,若不填則第一個號碼位置後方的所有元素都會被移除,若設定為 0 則不會有元素被移除 ),第三個以後是要添加的內容 ( 選填 )。
array.splice(start[, deleteCount[, item1[, item2[, …]]]])
本題解法
|
|
延伸閱讀: