--- tags: JS - 練習 --- # 【Reduce】 練習 > https://w3c.hexschool.com/blog/a2cb755f :::warning 每個元素都會呼叫回調函式(callback),可傳入四個參數: accumulator:累加器 currentValue:當前元素 currentIndex:當前元素的索引(選擇性) array: 呼叫 reduce() 方法的陣列(選擇性) 設定初始值: initialValue:第一次呼叫時要傳入的累加器初始值。(選擇性) 若沒有提供初始值,則原陣列的第一個元素將會被當作初始的累加器。 ### Reduce //有給預設值 const arr = [1, 2, 3, 4, 5]; const reduceArr = arr.reduce((accumulator, currentValue) => { return accumulator + currentValu; }); console.log(reduceArr); // 15 //沒有給預設值 const arr = [1, 2, 3, 4, 5]; const reduceArr = arr.reduce((accumulator, currentValue) => { console.log(accumulator); // 1, 3, 6, 10 console.log(currentValue); // 2, 3, 4, 5 return accumulator + currentValue; }); ::: > 請用下列資料,data為學校資料: ``` const data = [ { class: '甲', studentsNum: '12', studentsData: [ { id: 1, name: '陳小名', age: 24, interest: ['打球', '聽音樂'] }, { id: 2, name: '王大偉', age: 24, interest: ['聽音樂', '唱歌', '看書'] }, { id: 3, name: '許世斌', age: 23, interest: ['唱歌', '聽音樂'] }, { id: 4, name: '吳添財', age: 24, interest: ['打球', '聽音樂'] }, { id: 5, name: '曾無傭', age: 24, interest: ['打球'] }, { id: 6, name: '陳漢霖', age: 24, interest: ['喝酒', '唱歌', '看書'] }, { id: 7, name: '楊世博', age: 30, interest: ['聽音樂', '看書'] }, { id: 8, name: '楊漢鎮', age: 30, interest: ['看書', '唱歌'] }, { id: 9, name: '楊采媗', age: 30, interest: ['打球', '唱歌'] }, { id: 10, name: '詹天明', age: 30, interest: ['唱歌', '看書'] }, { id: 11, name: '楊是崁', age: 30, interest: ['看書'] }, { id: 12, name: '楊安浪', age: 24, interest: ['聽音樂', '唱歌', '看書'] } ] }, { class: '乙', studentsNum: '5', studentsData: [ { id: 1, name: '蔡申明', age: 50, interest: ['打球', '唱歌', '看書'] }, { id: 2, name: '蔡文旯', age: 51, interest: ['唱歌', '看書'] }, { id: 3, name: '陳炘採', age: 58, interest: ['打球'] }, { id: 4, name: '昂天次', age: 56, interest: ['聽音樂', '唱歌', '看書'] }, { id: 5, name: '王銘感', age: 58, interest: ['聽音樂'] } ] }, { class: '丙', studentsNum: '6', studentsData: [ { id: 1, name: '林赤子', age: 18, interest: ['唱歌'] }, { id: 2, name: '林小優', age: 24, interest: ['聽音樂', '唱歌', '看書'] }, { id: 3, name: '陳問鼎', age: 23, interest: ['打球', '唱歌', '看書'] }, { id: 4, name: '陳字字', age: 25, interest: ['打球', '唱歌', '聽音樂'] }, { id: 5, name: '陳余文', age: 66, interest: ['聽音樂', '唱歌', '看書'] }, { id: 6, name: '楊蔡文', age: 17, interest: ['打球', '聽音樂'] } ] } ] ``` ### Reduce 題目: :::info 請將甲班的同學名子整理出來放在一個陣列 例如: ['林小明', '詹雲逞'] ::: :::info 請將甲班的studentsData整理成只有ID,乙班整理成只有name,丙班添加一個身高(height)資料進去 ::: :::info 請將每個班級的班級和數量裝成物件,並將studentsNum的KEY命名為num,並存成陣列返回 例如: [{ class: '甲', num: '10' }...] ::: ### 補充練習 題目 (不限制方法,但必須最少用一次Reduce操作): :::info 請統計出該學校中姓"陳"的同學,並將甲班姓"陳"的同學排除 ::: :::info 請將該學校中學生的興趣整理出來,並存成一個陣列,陣列中的興趣不能重複 例如: ['聽音樂', '唱歌', '看書', '打球', '喝酒'] ::: :::info 請將甲班同學按照年齡排序,並將學生資料傳出,且檢查排序結果是否有問題 ::: <!-- function bubble(ary) { for(var i=0;i<ary.length;i++) { for(var j=0;j<ary.length - i - 1;j++) { if (ary[j].age > ary[j+1].age) { var temp = ary[j]; ary[j] = ary[j+1]; ary[j+1] = temp; } } } return ary } -->