避坑指南:DolphinScheduler 3.2.0集群部署,我踩过的那些权限和依赖的坑
2026/6/2 22:30:53
在前端(JavaScript)中,Array.prototype.map()是数组的核心高阶方法,用于遍历数组并返回一个新数组—— 新数组的每个元素是原数组元素经过指定回调函数处理后的结果。它不会修改原数组,是纯函数式编程的常用工具,广泛用于 React/Vue 等框架的列表渲染、数据转换等场景。
javascript
运行
const newArray = array.map((currentValue, index, array) => { // 处理逻辑,返回新值 }, thisArg);| 参数 | 说明 |
|---|---|
currentValue | 必选,当前遍历到的数组元素 |
index | 可选,当前元素的索引值 |
array | 可选,调用map的原数组本身 |
thisArg | 可选,执行回调函数时this的指向(箭头函数不生效,因箭头函数绑定外层this) |
返回值newArray | 新数组,长度与原数组一致,元素为回调函数的返回值 |
undefined/null元素(但空数组不执行回调);undefined。最常用场景 —— 将原数组的每个元素转换为新格式(如数字转字符串、对象属性提取)。
javascript
运行
// 示例1:数字数组转字符串数组 const nums = [1, 2, 3]; const strNums = nums.map(num => num.toString()); console.log(strNums); // ["1", "2", "3"] // 示例2:提取对象数组的指定属性 const users = [ { id: 1, name: "张三" }, { id: 2, name: "李四" }, { id: 3, name: "王五" } ]; const userNames = users.map(user => user.name); console.log(userNames); // ["张三", "李四", "王五"]map是渲染列表的标准方式,需为每个子元素加key(推荐用唯一标识,而非索引)。jsx
const TodoList = () => { const todos = ["吃饭", "睡觉", "写代码"]; return ( <ul> {todos.map((todo, index) => ( <li key={index}>{todo}</li> // 简单场景可用index,复杂场景用唯一id ))} </ul> ); };v-for,但底层也可结合map处理数据后渲染:vue
<template> <ul> <li v-for="item in processedList" :key="item.id">{{ item.name }}</li> </ul> </template> <script> export default { data() { return { list: [{ id: 1, name: "苹果" }, { id: 2, name: "香蕉" }] }; }, computed: { processedList() { // 转换数据格式后渲染 return this.list.map(item => ({ ...item, name: item.name + "(水果)" })); } } }; </script>利用index或array参数实现更复杂的逻辑(如给元素加序号、对比原数组)。
javascript
运行
const arr = ["a", "b", "c"]; // 给每个元素加序号(索引+1) const numberedArr = arr.map((item, index) => `${index + 1}. ${item}`); console.log(numberedArr); // ["1. a", "2. b", "3. c"] // 对比当前元素与原数组第一个元素 const compareArr = arr.map((item, _, original) => item === original[0]); console.log(compareArr); // [true, false, false]map是 “转换并返回新数组”,若仅需遍历执行操作(无返回值),应使用forEach,否则会生成无意义的undefined数组:
javascript
运行
// 错误用法:仅遍历打印,却用map(生成[undefined, undefined]) const arr = [1, 2]; const wrong = arr.map(num => console.log(num)); console.log(wrong); // [undefined, undefined] // 正确用法:遍历执行操作用forEach arr.forEach(num => console.log(num)); // 1 2(无返回值)return,否则新数组全为undefined;map不修改原数组,但如果元素是对象 / 数组(引用类型),修改其属性会改变原数组:javascript
运行
const users = [{ name: "张三" }]; users.map(user => { user.name = "李四"; // 会修改原数组的user对象! return user; }); console.log(users); // [{ name: "李四" }] // 解决:返回新对象(深/浅拷贝) const newUsers = users.map(user => ({ ...user, name: "李四" }));null/undefined,回调仍会执行:javascript
运行
const arr = [1, undefined, 3]; const newArr = arr.map(item => item || 0); console.log(newArr); // [1, 0, 3]list.map()(数组map方法)是前端处理数组的核心工具:
forEach。它是 React/Vue 等框架中列表渲染的 “标配”,也是日常数据处理的高频方法,掌握其用法能大幅提升前端数组处理效率。