
本文介绍使用 javascript 的 map 或 foreach 方法遍历二维货币数组,根据指定币种列表(如 aed、afn、amd)判断每项首元素是否匹配,并在原数组每项末尾追加 1(匹配)或 0(不匹配),实现简洁、可读性强的标记逻辑。
本文介绍使用 javascript 的 map 或 foreach 方法遍历二维货币数组,根据指定币种列表(如 aed、afn、amd)判断每项首元素是否匹配,并在原数组每项末尾追加 1(匹配)或 0(不匹配),实现简洁、可读性强的标记逻辑。
在实际开发中,常需对结构化数据(如 [["CODE", value], ...] 形式的二维数组)进行条件标记:给定一个目标标识符列表(如币种代码),遍历主数组,为每个子项追加一个布尔标记值(1 表示存在,0 表示不存在)。该需求无需复杂循环或嵌套判断,利用现代 JavaScript 的高阶函数与类型转换即可优雅解决。
核心思路是:对数组 a 中每一项解构出首元素(币种代码)和其余部分,再通过 b.includes(code) 判断是否存在于目标列表 b 中;利用一元加号 + 将布尔结果 true/false 自动转为 1/0,最后拼接回新数组项。
以下是推荐的两种实现方式:
✅ 推荐方式:使用 map() 创建新数组(函数式、不可变、安全)
const a = [ ["AED", 1], ["AFN", 22.08086], ["ALL", 27.171554], ["AMD", 105.058803], ["ANG", 0.487406], ["AOA", 227.493716], ["ARS", 95.308373], ["AUD", 0.420237], ["AWG", 0.487406], ["AZN", 0.462914], ["BAM", 0.490727], ["BBD", 0.544588] ]; const b = ["AED", "AFN", "AMD"]; const result = a.map(([code, ...rest]) => [code, ...rest, +b.includes(code)]); console.log(result); // 输出:[["AED",1,1],["AFN",22.08086,1],["ALL",27.171554,0],...,["BBD",0.544588,0]]
⚠️ 备选方式:使用 forEach() 原地修改(节省内存,但改变原始数据)
a.forEach(item => item.push(+b.includes(item[0]))); // 注意:此操作会直接修改原始数组 a,适用于明确需要就地更新的场景。
? 关键细节说明:
- ([code, ...rest]) 是数组解构语法,精准提取首项(币种码)与后续所有元素(数值等);
- b.includes(code) 返回 true 或 false,+ 运算符将其隐式转换为数字 1 或 0,比 ? 1 : 0 更简洁;
- map() 保持纯函数特性,不污染原始数据,利于调试与测试;forEach() 虽高效,但需谨慎用于共享状态场景;
- 若 b 数量极大(如上千项),可预先转换为 Set 提升查找性能:const bSet = new Set(b);,再用 bSet.has(code) 替代 includes。
总结:该方案以最小代码量达成清晰语义——“对每个币种项,标记其是否在白名单中”,兼具可读性、健壮性与扩展性,是处理类似二维数组条件映射任务的典型范式。










