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[, …]]]])
本題解法
|
|
延伸閱讀: