# 陣列系列操作 map 、 forEach 、 filter 、find 、 findIndex 的差別 // Js array map // 1.能將原始陣列運算後,重新組合回傳一個新陣列 // 2.不會影響到原陣列 // 3.適用時機:處理一整個陣列,並回傳到一個新陣列。 let date =[1,94,26,64,72]; //原陣列不受影響 let newData1 = date.map(function(item){ let obj = {}; obj.checked = item > 50; return obj;//使用此函式寫法,一定要加上 return 回傳結果 }); //上述第9項到13項為處理過的 新陣列 ( newData1 )。 console.error(newData1); //[false,true,false,true,true] --出來的是布林值 console.error(date); //---------------------------------------------------- // Js array forEach // 1.**無法**將原始陣列運算後,重新組合回傳一個新陣列 // 2.不會影響到原陣列 // 3.適用時機:將資料一筆一筆做出來 OR 組成HTML字串。 // 4.無法透過 return 中斷 let date =[1,94,26,64,72]; let arr = []; //自創空陣列 date.forEach(function(item){ let obj = {}; obj.content = item > 50; arr.push(obj); }) console.log(arr); // 新陣列 console.log(date); //---------------------------------------------------- // Js array filter 篩選 // 1.篩選出符合條件的內容值後,重新組合回傳一個新陣列 // 2.不會影響到原陣列 // 3.適用時機:用在下拉選擇市區 OR 比價 OR 篩選及格分數出來 。 let date =[1,94,26,64,72]; let newData1 = date.filter(function(item){ return item > 50;//使用此函式寫法,一定要加上 return 回傳結果 }); console.log(newData1); // [94, 64, 72] --出來的是值 //---------------------------------------------------- // Js array find 篩選 // 1.篩選出符合條件的內容值後,回傳**第一筆**符合的條件內容值 // 2.不會影響到原陣列 // 3.適用時機:尋找頭一筆資料的時候。 let date = [5,60,78,34,62,94]; let newArr = date.find(item => { console.log(item) // 只會將 date 的陣列資料跑兩次也就是回饋 5 跟 60 的值,其主要是 find 只要找到第一個符合的值,就直接 return 找到的資訊,就不會繼續往下找了,也就是說當找到 item >= 30 (也就是當 60 為第一個滿足點),就不往後跑 78、34、62、94的值了。--->此前提是 已設定條件:(return item >= 30)才會發生此情況。 return item >= 30;//使用此函式寫法,一定要加上 return 回傳結果 }) console.warn(date); //[5, 60, 78, 34, 62, 94] console.log( newArr); // 60 ※ 缺點: 假設上述篩選;若是想要篩選 陣列中 34 的資料時,是無法被選取到的,其因為 [設定的條件是: return item >= 30],故在選取頭一筆資料時,在遇到 陣列中 60 的資料,就已經符合設定條件,所以會優先回傳 60 的資料。 //---------------------------------------------------- // Js array findIndex 篩選 // 1.篩選出符合條件的**索引值**後,回傳第一筆符合的 **索引** 編號 // 2.不會影響到原陣列 // 3.適用時機: 查詢並篩選 訂單編號的資料。 let order = [ { name:'小劉', orderId:11698120 }, { name:'小陳', orderId:36985410 }, { name:'小鍾', orderId:12034569 } ] let newObj = order.findIndex(index=>{ console.warn(index); // 只會將 order 的陣列資料跑兩次也就是回饋 小劉 跟 小陳 的物件資料,其主要是 findIndex 只要找到第一個符合的值,就直接 return 找到的資訊,就不會繼續往下找了,也就是說當找到 index.orderId == '36985410' (就是 orderId == '36985410'為第一個滿足點),就不往後跑 小鍾的物件資料了。--->此前提是 已設定條件:(return index.orderId == '36985410')才會發生此情況。 return index.orderId == '36985410';//使用此函式寫法,一定要加上 return 回傳結果 }) console.log(newObj); // 回傳 索引值 第1筆資料 console.log(`這筆訂單是${order[newObj].name}`);//這筆訂單是小陳