如何用map()替代for循环,将数组中undefined值替换为namaPenumpang?
用map()实现座位乘客管理逻辑(替代for循环)
先明确要保留的核心业务逻辑:
- 若乘客姓名已存在,弹出提示并返回原数组
- 座位数组为空时,直接添加该乘客
- 数组中有
undefined时,替换undefined为乘客姓名(以下提供两种实现:替换所有/仅替换第一个) - 数组无
undefined时,将乘客姓名追加到数组末尾
实现1:替换所有undefined
function tambahPenumpang(namaPenumpang, kursi) { // 检查乘客是否已存在(忽略undefined) if (kursi.some(penumpang => penumpang === namaPenumpang)) { alert(`${namaPenumpang} sudah ada dalam daftar penumpang!`); return [...kursi]; // 返回原数组拷贝,避免修改原数组 } // 数组为空时直接返回新数组 if (kursi.length === 0) { return [namaPenumpang]; } // 判断数组是否包含undefined const hasUndefined = kursi.includes(undefined); if (hasUndefined) { // 用map遍历替换所有undefined return kursi.map(penumpang => penumpang === undefined ? namaPenumpang : penumpang); } else { // 无undefined则追加到数组末尾 return [...kursi, namaPenumpang]; } }
实现2:仅替换第一个遇到的undefined
如果原for循环逻辑是找到第一个undefined就替换并终止遍历,可以用map配合标记变量实现:
function tambahPenumpang(namaPenumpang, kursi) { // 检查乘客是否已存在 if (kursi.some(penumpang => penumpang === namaPenumpang)) { alert(`${namaPenumpang} sudah ada dalam daftar penumpang!`); return [...kursi]; } // 数组为空时直接返回新数组 if (kursi.length === 0) { return [namaPenumpang]; } let replaced = false; // 标记是否已完成替换 const newKursi = kursi.map(penumpang => { // 仅在未替换过且当前元素是undefined时执行替换 if (!replaced && penumpang === undefined) { replaced = true; return namaPenumpang; } return penumpang; }); // 若未替换过(说明数组无undefined),则追加乘客 if (!replaced) { return [...newKursi, namaPenumpang]; } return newKursi; }
关键说明
- 用
some()替代手动遍历检查乘客是否存在,代码更简洁高效 - 用扩展运算符
[...kursi]返回数组拷贝,避免修改原数组,保持函数的纯特性 - map()方法天然适合遍历数组并转换元素,完美替代原for循环中对每个元素的处理逻辑
内容的提问来源于stack exchange,提问作者Gudel Developer
相关产品推荐
相关产品推荐

