###### tags: `JavaScript` # 陣列操作 ## forEach ```javascript=1 let data = [1,2,3]; data.forEach(function(item, index, array){ console.log(item, index, array); // 結果如下 // 1, 0, [1, 2, 3] // 2, 1, [1, 2, 3] // 3, 2, [1, 2, 3] }); ``` ## map 1. 能將原始帳列運算後,重新組合回傳一個新陣列 2. 不會引響到原本的陣列 3. map 沒有 return 會回傳 undefined ```javascript=1 let data = [1,2,3]; let newData = data.map(function(item){ return item * item }); console.log(data); // [1, 2, 3] console.log(newData); // [1, 4, 9] ``` ```javascript=1 let data = [1,5,10,8,4,2]; let newData = data.map(function(item){ return item > 5 }); // 組合物件 let newData1 = data.map(function(item){ let obj = {} obj.checkNum = item > 5 return obj }); console.log(data); // [1, 5, 10, 8, 4, 2] console.log(newData); // [false, false, true, true, false, false] console.log(newData1); // [{…}, {…}, {…}, {…}, {…}, {…}] ``` ![](https://i.imgur.com/Nfz9OUK.png) ### forEach 與 map 差別 ```javascript=1 let data = [1,2,3]; let newData = data.forEach(function(item){ return item * item }); console.log(data); // [1, 2, 3] // 因為使用 forEach 他並不會重新組合回傳一個新陣列,所以是 undefined // 也無法使用 return 回傳值 console.log(newData); // undefined ``` ## filter 篩選全部的資料 1. 塞選出符合條件的內容,重新組合回傳一個新陣列 2. 不會引響到原本的陣列 ```javascript=1 let data = [1,4,10,15]; let newData = data.filter(function(item){ return item > 5 }); console.log(data); // [1,4,10,15] console.log(newData); // [10, 15] ``` 範例 (通常用於比價、下拉選市區、比較) ```javascript=1 // 分數 let scoreData = [ { name: '阿呆', score: 100, }, { name: '阿美', score: 61, }, { name: '阿新', score: 40, }, ]; // 篩塞選及格的人 let filterScore = scoreData.filter(function(item){ return item.score >= 60 }); console.log(filterScore); // (2) [{…}, {…}] // 0: {name: '阿呆', score: 100} // 1: {name: '阿美', score: 61} ``` ## find 尋找第一筆符合條件的資料 1. 找出符合條件的第一筆資料,重新組合回傳一個新陣列 2. 不會引響到原本的陣列 ```javascript=1 let data = [1,4,10,15]; let newData = data.find(function(item){ return item > 5 }); console.log(data); // [1,4,10,15] console.log(newData); // [10] ``` ## findIndex 尋找資料索引 1. 找出符合條件的第一筆資料,回傳索引值 2. 不會引響到原本的陣列 ```javascript=1 let data = [10,20,30]; let newData = data.findIndex(function(item){ return item >=15 }); console.log(data); // [10,20,30] console.log(newData); // 1 ``` ## reduce 陣列元素累加 1. 能將陣列內數值做累加 2. 不會引響到原本的陣列 ```javascript=1 // 純數字 const numbers = [1, 2, 3, 4, 5]; const total = numbers.reduce((a, b) => { return a + b; }, 0); console.log(total); // 15 console.log(typeof total); // number // 裡面有字串 const strInArr = [1, 2, "3", 4, 5]; const strInArrTotal = strInArr.reduce((a, b) => { return a + b; }, 0); console.log(strInArrTotal); // '3345' console.log(typeof strInArrTotal); // string // 裡面有陣列 const arrInArr = [1, 2, [69, 32], 4, 5]; const arrInArrTotal = arrInArr.reduce((a, b) => { return a + b; }, 0); console.log(arrInArrTotal); // '369,3245' console.log(typeof arrInArrTotal); // string // 裡面有物件 const objInArr = [1, 2, [{id: 10}, {id: 99}], 4, 5]; const objInArrTotal = objInArr.reduce((a, b) => { return a + b; }, 0); console.log(objInArrTotal); // '3[object Object],[object Object]45' console.log(typeof objInArrTotal); // string ``` ## at 尋找陣列位置資料 1. 找陣列的位置並且回傳值 2. 不會引響到原本的陣列 ```javascript=1 // 可以填 -1 找到陣列最後一筆資料 const array1 = [5, 12, 8, 130, 44, 66, 99, 10, 50]; console.log(array1.at(-1)); // 50 // 也可以往後找第 N 筆 console.log(array1.at(-3)); // 99 ``` ## concat 合併陣列 1. 合併 2 筆(以上)的陣列 2. 不會引響到原本的陣列 ```javascript=1 const array1 = ['a', 'b', 'c']; const array2 = ['d', 'e', 'f']; const array3 = array1.concat(array2); console.log(array3); // ["a", "b", "c", "d", "e", "f"] // 合併多筆 const num1 = [1, 2, 3]; const num2 = [4, 5, 6]; const num3 = [7, 8, 9]; const numbers = num1.concat(num2, num3); console.log(numbers); // [1, 2, 3, 4, 5, 6, 7, 8, 9] // 合並陣列包陣列 const arr1 = ['a', 'b', 'c']; const arr2 = [[2, 3], 4] const newArr = arr1.concat(1, arr2); console.log(newArr); // ["a", "b", "c", 1, [2, 3], 4] ``` ## join 合併陣列轉成字串 ```javascript=1 const arr = ['nick', 'chang'] console.log(arr.join(' ')) // nick chang const obj = [{ id: 1 }, { id: 2 }] console.log(obj.join(' ')) // [object Object] [object Object] const integrated = [1, 2, 'asd', '!@#df', [123, 999, { id: 100 }]] console.log(integrated.join('-')) // 1-2-asd-!@#df-123,999,[object Object] ```