diff --git a/readme.md b/readme.md index 5087c572690cff87148be84a5c7d0d394b64018b..c0d5809c7b7a0ca903fbf260c1e7c8d5a28896f0 100644 --- a/readme.md +++ b/readme.md @@ -2,4 +2,227 @@ 上课录屏地址:https://www.alipan.com/s/tnX6ocjnMrQ -"天行健,君子以自强不息。" —— 《周易》 \ No newline at end of file +"天行健,君子以自强不息。" —— 《周易》 + + +# Javascript技术及应用 + +## Javascript基础 + +### 开发环境与初体验 +- 编辑器 + - 常用编辑器 + - 记事本 + - Sublime Text4 + - vim + - webstorm + - Trae + - HBuilderX + - DreamWeave + - 我们选用的编辑器 + - Visual Studio Code + +### 变量、常量和基础数据类型 +- var let定义变量,请忘记var,后续只使用let +- const定义常量,常量名全大写 +- 数据类型 + - 基础数据类型 + - string + - number + - boolean + - underfined + - null + - 复合数据类型 + - 对象 + - 数组 + - 函数 + +### 运算符和数据类型转换 +- + - * / % +- 逻辑运算 + - null undefined 0 '' 这些字面量参与逻辑运算时,作为false,其余的值作为true + - 短路运算 true || 表达式 false && 表达式 +- 赋值运算 = += -+ ++ --等 +- parseInt parseFloat 乘1变数字 加空字符串变字符串 + +### 流程控制 +- 判断 + - if + - if ... else + - if ... else if() + - if ... else if()... else + - switch +- 循环 + - for + - while + - do...while +- 三元运算 +## 核心数据结构及用法 + +### 数组 +- 改变数组本身的方法 + - sort 排序,接受一个比较器 + - push pop 从尾部添加、删除 + - unshift shift 从头部添加、删除 + - splice 万能方法 删除元素、添加元素、修改元素 + - reverse 倒置 + - fill 填充 +- 不改变数组本身的方法 + - concat 拼接数组 + - slice 截取 + - map 将一个函数用在数组的每一个元素上,并将处理后的结果放入新的数组 + - filter 将一个函数用在数组的每个元素上,如果这个元素运算的结果为true,则将元素放入新的数组,反之不放,最终得到新的数组 + - reduce 将一个函数用在数组的前2个元素上,计算后的结果作为同一个函数第一个参数和数组的第三元素作为第二参数进行运算 + - forEach 遍历 + - find 将一个函数作用在数组的每一个元素上,返回true,则返回这个元素,否则最终返回undefined + - findIndex 将一个函数作用在数组的每一个元素上,返回true,则返回这个元素下标,否则最终返回undefined + - every + - some + - includes + - indexOf + - lastIndexOf + - join +- 高阶函数 + - 一个函数f,接受另外一个函数作为其参数,则称函数f为高阶函数 +### 函数 +- 函数定义 三种定义方式 +- 函数参数 可传可不传,不会因为没有参数而报错 +- 函数返回值 如果没有返回值,则默认返回undefined + +### 对象 +- 包含在一对大括号中的内容 +- 键值对,键也就是属性,值也就属性值 +- 也可以使用类似于数组的形式访问某个值,或者为其添加新的属性 + + + +## Dom操作 + +### Dom基础 + +### 操作元素内容与属性 + +### 处理用户交互-事件 + +### 动态创建与修改Dom元素 + +## 数据交互与异步操作 + +### 异步编程入门 + +### Promise + +### Fetch Api + +### Json + +## jQuery基础 + +### jQuery 基础 + +- 是一个js库,为了方便dom操作 +- 和js的引用一样,建议在body结束标签之前引用 +- 使用`$`来使用jQuery库的能力,`$`符号实际是一个方法,当然方法在js中也是一个对象,所以其也有一些属性可以使用 +- jquery获取到的是jQuery,和原生js拿到的dom对象不同,但它们间可以相互转换 + - let div=$('div')拿到jquery对象 + - div[0]拿到dom对象 + - $(div[0])又可以重新转换为jquery对象 +### jQuery 选择器与操作 +- 基础选择器 + - 标签选择器 + - 类名选择器 + - id选择器 +- 关系选择器 + - 子代选择器 ` ` + - 直接子代选择器 `>` + - 兄弟选择器 `~` + - 相邻兄弟选择器 `+` +- 高级选择器 + - 属性选择器 + - 伪类选择器 + - 伪元素选择器 +### jQuery 事件处理 +- jQuery对象.on('click',function(){}) +- jQuery对象.click(function(){}) +- jQuery对象.trigger('click',function(){}) +- $(function(){}) +### jQuery 动画与效果 +- 基础效果:显示、隐藏 show()、hide()、toggle() +- 进阶效果:淡入、淡出 fadeIn()、fadeOut() +- 高级效果:animate() +### jQuery DOM 操作 +- 新增 append给拿到的元素增加一个下级元素 +- 移除 remove 移除拿到的元素 +- text() 拿到文本内容 ,text('要设置的内容')可以修改纯文本内容 +- html() 拿到包含标签的内容 ,html('要设置的内容')可以修改包含标签的内容 + +## 综合应用与进阶 + +### 本地存储 +### 错误处理 +### 模块化(选修) +### 综合实战项目 + + + +# 部署一个网站需要了解东西 + +## 域名(备案过的域名) +### 解析 +- 也叫域名绑定,是指将域名指向一个IP地址的过程 +- 在网络世界中,能找到服务器及其资源的唯一地址是IP地址 +### ssl证书(可选) + +## 服务器(带公网IP的linux服务器) +### 常用命令 +- 登录服务器 + - telnet 上古时期 + - SSH 现代时期 +- 创建文件 + - touch xxx 创建一个新的空文件 + - vim xxx.txt 打开/创建一个文件 +- 创建文件夹 + - mkdir +- 切换目录 + - cd +- 列出目录清单 + - ls 列出指定目录下的内容(如果未指定则指列出当前目录) +- 安装软件 + - apt install nginx -y +- 更新软件 + - apt upgrade -y +- 卸载软件 + - apt uninstall nginx -y +- 重启服务 +- 停止服务 +- 开启服务 +- 服务自启动 +- 管理软件命令 apt + - 更新软件源 apt update + - 更新软件 apt upgrade -y +### nginx +- 安装命令 + - apt install nginx -y + - 会被安装为一个服务 + - 检测服务状态 systemctl status nginx + - 启用nginx systemctl start nginx + - 禁用nginx systemctl stop nginx + - 重启nginx systemctl restart nginx + - 自启动nginx systemctl enable nginx +- 配置 + - 配置文件放在哪 + - /etc/nginx/conf.d + - 配置文件内容 + - ` + server { + listen 80; + server_name abc.liing.top; + + location / { + root /var/www/abc.liing.top; + index index.html; + } + } + ` +- 保证相应路径中有指定文件 + - /var/www/abc.liing.top \ No newline at end of file diff --git "a/\346\235\216\346\231\250\346\273\224/20251217-200\347\273\203\344\271\240.md" "b/\346\235\216\346\231\250\346\273\224/20251217-200\347\273\203\344\271\240.md" index 50d8e85f61d9fb4e59593f59b7f069fb44da2653..07157a109e23ac9a0b448dbdc15a12810008bfa8 100644 --- "a/\346\235\216\346\231\250\346\273\224/20251217-200\347\273\203\344\271\240.md" +++ "b/\346\235\216\346\231\250\346\273\224/20251217-200\347\273\203\344\271\240.md" @@ -73,91 +73,4 @@ document.write("今天是工作日,不要上班"); break; } -``` - -7. -```bash - let arr = [ - '苹果', '香蕉', '橙子' - ]; - for(let value of arr){ - document.write(value); - } -``` - -8. -```bash - let object = { name: '张三', age: 20, city: '北京' }; - for (const property in object) { - console.log(`${property}: ${object[property]}`); - } -``` - -9. -```bash - let arr = [-5, 1, 4, 50, 60]; - for (const num of arr) { - if (num < 0) { - continue; - } - if (num > 50) { - document.write(num); - break; - } - } -``` - -10. -```bash - for(let i = 1 ;i<=9;i++){ - for(let j = 1;j<=9;j++){ - document.write(`${i}*${j}=${i*j}
`); - } - } -``` - -11. -```bash - let age = 18; - let status1,status2; - - status1 = age >=18?'成年':'未成年'; - - if (age >= 18) { - status2 = '成年'; - } else { - status2 = '未成年'; - } - - console.log("三元运算符实现:"); - console.log(`let status1 = age >= 18 ? '成年' : '未成年'; 结果:${status1}`); - - console.log("\nif-else 实现:"); - console.log(`if (age >= 18) { status2 = '成年'; } else { status2 = '未成年'; } 结果:${status2}`); -``` - -12. -```bash - let num = Math.floor(Math.random() * 100) + 1; - while (true) { - let guess = prompt('请输入你猜测的数字(1-100):'); - if(guess ===null){ - alert('游戏已取消'); - continue; - } - if (guess < 1 || guess > 100) { - alert('请输入区域内的数字!'); - } else { - if (guess > num) { - alert('太大啦!'); - } - if (guess == num) { - alert('恭喜你猜对啦!'); - break; - } - if (guess < num) { - alert('太小啦!'); - } - } - } ``` \ No newline at end of file diff --git "a/\346\235\216\346\231\250\346\273\224/20251218-200\347\273\203\344\271\240.md" "b/\346\235\216\346\231\250\346\273\224/20251218-200\347\273\203\344\271\240.md" index 890a604c2b2a77c43d9d8a8e952d630be7975657..819a68346177badc5a60bb73780d8b04499ec6bc 100644 --- "a/\346\235\216\346\231\250\346\273\224/20251218-200\347\273\203\344\271\240.md" +++ "b/\346\235\216\346\231\250\346\273\224/20251218-200\347\273\203\344\271\240.md" @@ -38,46 +38,4 @@ } console.log(counts(arr,item)); -``` - -4. -```bash - let arr = [1,2,4,4,3,3,1,5,3]; - function find(arr){ - const countMap = new Map(); - const duplicates = []; - - for (const item of arr){ - countMap.set(item,(countMap.get(item)||0)+1); - } - - for(const [key,value] of countMap){ - if(value>=2){ - duplicates.push(key); - } - } - return duplicates; - } - console.log(find(arr)); -``` - -5. -```bash - let arr = [1,2,3,4,2,5] - let item = 2; - function remove(arr,item){ - return arr.filter(element => element !==item); - } - console.log(remove(arr,item)); -``` - -6. -```bash - let arr = [{ name: "小明", score: 85 }, { name: "小红", score: 55 }, { name: "小刚", score: 90 }]; - function getPassed(arr) { - return arr - .filter(arr => arr.score >= 60) - .map(arr => arr.name); - } - console.log(getPassed(arr)); ``` \ No newline at end of file diff --git "a/\346\235\216\346\231\250\346\273\224/20251219-200\347\273\203\344\271\240.md" "b/\346\235\216\346\231\250\346\273\224/20251219-200\347\273\203\344\271\240.md" index 8336e207583157057e98eb361251a21c0575b022..5a418cc2f3ba4c4060147cfbe61c99eb7fc7c2e1 100644 --- "a/\346\235\216\346\231\250\346\273\224/20251219-200\347\273\203\344\271\240.md" +++ "b/\346\235\216\346\231\250\346\273\224/20251219-200\347\273\203\344\271\240.md" @@ -34,143 +34,4 @@ return arr.reduce((prev, curr) => Math.max(prev, curr), arr[0]); } console.log(maxNum(arr)); -``` - -11. -```bash - let arr = [2, 5, 8, 12, 15, 7]; - function firstMaxNum(arr) { - return arr.find(num => num > 10); - } - console.log(firstMaxNum(arr)); -``` - -12. -```bash - let arr = [1, 5, 3, -2, 8, -5]; - function firstNegativeNum(arr) { - return arr.findIndex(num => num < 0); - } - console.log(firstNegativeNum(arr)); -``` - -13. -```bash - let arr = [1, 3, 5, 7, 8]; - function evenNum(arr) { - return arr.some(num => num % 2 == 0); - } - console.log(evenNum(arr)); -``` - -14. -```bash - let arr = [1, 2, 3, 4, 5]; - function allNum(arr) { - return arr.every(num => num > 0); - } - console.log(allNum(arr)); -``` - -15. -```bash - let arr = [40, 100, 1, 5, 25, 10]; - function allNum(arr) { - return arr.sort((a, b) => a - b); - } - console.log(allNum(arr)); -``` - -16. -```bash - let arr = [{ name: "小明", age: 20 }, { name: "小红", age: 18 }, { name: "小刚", age: 22 }]; - function allNum(arr) { - return [...arr].sort((a, b) => a.age - b.age); - } - console.log(allNum(arr)); -``` - -17. -```bash - let arr = ['apple', 'banana', 'orange']; - function printArr(arr) { - let output = ''; - arr.forEach((item, index) => { - output += `索引${index}: ${item} `; - }); - console.log(output.trim()); - } - printArr(arr); -``` - -18. -```bash - let arr = [[1, 2], [3, 4], [5, 6]]; - function flattening(arr) { - return arr.reduce((acc, curr) => acc.concat(curr), []); - } - console.log(flattening(arr)); -``` - -19. -```bash - let arr = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']; - function appear(arr) { - return arr.reduce((acc, curr) => { - acc[curr] = (acc[curr] ?? 0) + 1; - return acc; - }, {}); - } - console.log(appear(arr)); -``` -20. -```bash - let arr = [{ name: "鼠标", price: 29 }, { name: "键盘", price: 89 }, { name: "显示器", price: 899 }, { name: "耳机", price: 199 }]; - function name(arr) { - return arr - .filter(arr => arr.price > 50) - .sort((a, b) => a.price - b.price); - } - console.log(name(arr)); -``` -21. -```bash - let arr = [2, 5, 8, 3, 9]; - function name(arr) { - return arr - .map(num => num * 2) - .filter(num => num > 10); - } - console.log(name(arr)); -``` -22. -```bash - let arr = [1, 2, 2, 3, 4, 4, 5, 1]; - function deduplication(arr) { - return arr.reduce((acc, curr) => { - !acc.includes(curr) && acc.push(curr); - return acc; - }, []); - } - console.log(deduplication(arr)); -``` -23. -```bash - let arr = [{ name: "小明", score: 85 }, { name: "小红", score: 92 }, { name: "小刚", score: 78 }, { name: "小丽", score: 88 }]; - function averageScore(arr) { - if (arr.length === 0) return 0; - const totalScore = arr.reduce((acc, curr) => acc + curr.score, 0); - return totalScore / arr.length - } - console.log(averageScore(arr)); -``` -24. -```bash - let arr = [{ name: "张三", age: 17 }, { name: "李四", age: 20 }, { name: "王五", age: 25 }, { name: "赵六", age: 16 }]; - function adults() { - return arr - .filter(arr => arr.age > 18) - .map(item => `${item.name}(${item.age}岁)`); - } - console.log(adults(arr)); ``` \ No newline at end of file diff --git "a/\346\235\216\346\231\250\346\273\224/20251222-200\347\273\203\344\271\240.md" "b/\346\235\216\346\231\250\346\273\224/20251222-200\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..9184f19389e61a23889690d34dc90c2d67b3c8ce --- /dev/null +++ "b/\346\235\216\346\231\250\346\273\224/20251222-200\347\273\203\344\271\240.md" @@ -0,0 +1,86 @@ +7. +```bash + let arr = [ + '苹果', '香蕉', '橙子' + ]; + for(let value of arr){ + document.write(value); + } +``` + +8. +```bash + let object = { name: '张三', age: 20, city: '北京' }; + for (const property in object) { + console.log(`${property}: ${object[property]}`); + } +``` + +9. +```bash + let arr = [-5, 1, 4, 50, 60]; + for (const num of arr) { + if (num < 0) { + continue; + } + if (num > 50) { + document.write(num); + break; + } + } +``` + +10. +```bash + for(let i = 1 ;i<=9;i++){ + for(let j = 1;j<=9;j++){ + document.write(`${i}*${j}=${i*j}
`); + } + } +``` + +11. +```bash + let age = 18; + let status1,status2; + + status1 = age >=18?'成年':'未成年'; + + if (age >= 18) { + status2 = '成年'; + } else { + status2 = '未成年'; + } + + console.log("三元运算符实现:"); + console.log(`let status1 = age >= 18 ? '成年' : '未成年'; 结果:${status1}`); + + console.log("\nif-else 实现:"); + console.log(`if (age >= 18) { status2 = '成年'; } else { status2 = '未成年'; } 结果:${status2}`); +``` + +12. +```bash + let num = Math.floor(Math.random() * 100) + 1; + while (true) { + let guess = prompt('请输入你猜测的数字(1-100):'); + if(guess ===null){ + alert('游戏已取消'); + continue; + } + if (guess < 1 || guess > 100) { + alert('请输入区域内的数字!'); + } else { + if (guess > num) { + alert('太大啦!'); + } + if (guess == num) { + alert('恭喜你猜对啦!'); + break; + } + if (guess < num) { + alert('太小啦!'); + } + } + } +``` \ No newline at end of file diff --git "a/\346\235\216\346\231\250\346\273\224/20251224-200\347\273\203\344\271\240.md" "b/\346\235\216\346\231\250\346\273\224/20251224-200\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..86ff9f5b23a065341b2b1ab328f6fef419c11d37 --- /dev/null +++ "b/\346\235\216\346\231\250\346\273\224/20251224-200\347\273\203\344\271\240.md" @@ -0,0 +1,41 @@ +4. +```bash + let arr = [1,2,4,4,3,3,1,5,3]; + function find(arr){ + const countMap = new Map(); + const duplicates = []; + + for (const item of arr){ + countMap.set(item,(countMap.get(item)||0)+1); + } + + for(const [key,value] of countMap){ + if(value>=2){ + duplicates.push(key); + } + } + return duplicates; + } + console.log(find(arr)); +``` + +5. +```bash + let arr = [1,2,3,4,2,5] + let item = 2; + function remove(arr,item){ + return arr.filter(element => element !==item); + } + console.log(remove(arr,item)); +``` + +6. +```bash + let arr = [{ name: "小明", score: 85 }, { name: "小红", score: 55 }, { name: "小刚", score: 90 }]; + function getPassed(arr) { + return arr + .filter(arr => arr.score >= 60) + .map(arr => arr.name); + } + console.log(getPassed(arr)); +``` \ No newline at end of file diff --git "a/\346\235\216\346\231\250\346\273\224/20251225-200\347\273\203\344\271\240.md" "b/\346\235\216\346\231\250\346\273\224/20251225-200\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..b9f3d2606c1a63aaf7f94cdbf108fef955da667c --- /dev/null +++ "b/\346\235\216\346\231\250\346\273\224/20251225-200\347\273\203\344\271\240.md" @@ -0,0 +1,111 @@ +14. +```bash + let arr = [1, 2, 3, 4, 5]; + function allNum(arr) { + return arr.every(num => num > 0); + } + console.log(allNum(arr)); +``` + +15. +```bash + let arr = [40, 100, 1, 5, 25, 10]; + function allNum(arr) { + return arr.sort((a, b) => a - b); + } + console.log(allNum(arr)); +``` + +16. +```bash + let arr = [{ name: "小明", age: 20 }, { name: "小红", age: 18 }, { name: "小刚", age: 22 }]; + function allNum(arr) { + return [...arr].sort((a, b) => a.age - b.age); + } + console.log(allNum(arr)); +``` + +17. +```bash + let arr = ['apple', 'banana', 'orange']; + function printArr(arr) { + let output = ''; + arr.forEach((item, index) => { + output += `索引${index}: ${item} `; + }); + console.log(output.trim()); + } + printArr(arr); +``` + +18. +```bash + let arr = [[1, 2], [3, 4], [5, 6]]; + function flattening(arr) { + return arr.reduce((acc, curr) => acc.concat(curr), []); + } + console.log(flattening(arr)); +``` + +19. +```bash + let arr = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']; + function appear(arr) { + return arr.reduce((acc, curr) => { + acc[curr] = (acc[curr] ?? 0) + 1; + return acc; + }, {}); + } + console.log(appear(arr)); +``` +20. +```bash + let arr = [{ name: "鼠标", price: 29 }, { name: "键盘", price: 89 }, { name: "显示器", price: 899 }, { name: "耳机", price: 199 }]; + function name(arr) { + return arr + .filter(arr => arr.price > 50) + .sort((a, b) => a.price - b.price); + } + console.log(name(arr)); +``` +21. +```bash + let arr = [2, 5, 8, 3, 9]; + function name(arr) { + return arr + .map(num => num * 2) + .filter(num => num > 10); + } + console.log(name(arr)); +``` +22. +```bash + let arr = [1, 2, 2, 3, 4, 4, 5, 1]; + function deduplication(arr) { + return arr.reduce((acc, curr) => { + !acc.includes(curr) && acc.push(curr); + return acc; + }, []); + } + console.log(deduplication(arr)); +``` +23. +```bash + let arr = [{ name: "小明", score: 85 }, { name: "小红", score: 92 }, { name: "小刚", score: 78 }, { name: "小丽", score: 88 }]; + function averageScore(arr) { + if (arr.length === 0) return 0; + const totalScore = arr.reduce((acc, curr) => acc + curr.score, 0); + return totalScore / arr.length + } + console.log(averageScore(arr)); +``` +24. +```bash + let arr = [{ name: "张三", age: 17 }, { name: "李四", age: 20 }, { name: "王五", age: 25 }, { name: "赵六", age: 16 }]; + function adults() { + return arr + .filter(arr => arr.age > 18) + .map(item => `${item.name}(${item.age}岁)`); + } + console.log(adults(arr)); +``` \ No newline at end of file diff --git "a/\346\235\216\346\231\250\346\273\224/20251226-200\347\273\203\344\271\240.md" "b/\346\235\216\346\231\250\346\273\224/20251226-200\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..aaeed9e4500acf7e32ce6d40858e526b16244f8e --- /dev/null +++ "b/\346\235\216\346\231\250\346\273\224/20251226-200\347\273\203\344\271\240.md" @@ -0,0 +1,26 @@ +11. +```bash + let arr = [2, 5, 8, 12, 15, 7]; + function firstMaxNum(arr) { + return arr.find(num => num > 10); + } + console.log(firstMaxNum(arr)); +``` + +12. +```bash + let arr = [1, 5, 3, -2, 8, -5]; + function firstNegativeNum(arr) { + return arr.findIndex(num => num < 0); + } + console.log(firstNegativeNum(arr)); +``` + +13. +```bash + let arr = [1, 3, 5, 7, 8]; + function evenNum(arr) { + return arr.some(num => num % 2 == 0); + } + console.log(evenNum(arr)); +``` \ No newline at end of file diff --git "a/\346\235\216\346\231\250\346\273\224/24\347\272\247\345\205\250\346\240\210\345\274\200\345\217\221\346\226\271\345\220\221js\347\273\203\344\271\240\351\233\206.md" "b/\346\235\216\346\231\250\346\273\224/24\347\272\247\345\205\250\346\240\210\345\274\200\345\217\221\346\226\271\345\220\221js\347\273\203\344\271\240\351\233\206.md" index 60721ee29703e713142c3792a313cfa89f382bb1..79f49569d46ddd881b1cc7fa310e804e3d11ca5d 100644 --- "a/\346\235\216\346\231\250\346\273\224/24\347\272\247\345\205\250\346\240\210\345\274\200\345\217\221\346\226\271\345\220\221js\347\273\203\344\271\240\351\233\206.md" +++ "b/\346\235\216\346\231\250\346\273\224/24\347\272\247\345\205\250\346\240\210\345\274\200\345\217\221\346\226\271\345\220\221js\347\273\203\344\271\240\351\233\206.md" @@ -452,20 +452,19 @@ 9. ```bash let arr = [10, 20, 30, 40, 50]; - function sum(arr) { - // 累加器(acc)和当前元素(curr)参数,设置初始值0 - return arr.reduce((acc, curr) => acc + curr, 0); + function sum2(arr) { + return arr.reduce((a, b) => a + b, 0); } - console.log(sum(arr)); + console.log(sum2(arr)); // 输出 150 ``` 10. ```bash let arr = [3, 7, 2, 9, 1, 5]; - function maxNum(arr) { - return arr.reduce((prev, curr) => Math.max(prev, curr), arr[0]); + function findMax(arr) { + return arr.reduce((a, b) => a > b ? a : b, arr[0]); } - console.log(maxNum(arr)); + console.log(findMax(arr)); ``` 11. @@ -525,21 +524,19 @@ 17. ```bash let arr = ['apple', 'banana', 'orange']; - function printArr(arr) { - let output = ''; - arr.forEach((item, index) => { - output += `索引${index}: ${item} `; - }); - console.log(output.trim()); + function printArrWithIndex(arr) { + arr.forEach((item, index) => { + console.log(`索引${index}: ${item}`); + }); } - printArr(arr); + printArrWithIndex(arr); ``` 18. ```bash let arr = [[1, 2], [3, 4], [5, 6]]; function flattening(arr) { - return arr.reduce((acc, curr) => acc.concat(curr), []); + return arr.reduce((a, b) => a.concat(b), []); } console.log(flattening(arr)); ```