仅使用for循环与.push()方法拆分含'o'和不含'o'的数组
问题解决:拆分含'o'与不含'o'的名字数组
你的代码逻辑存在两个核心问题:
- 对每个名字的每个字符都执行一次push操作,导致单个名字被多次添加到目标数组(比如"octavia"会因多个非'o'字符被反复塞进namesNoO)
- 没有判断名字整体是否含'o',只要有一个非'o'字符就把名字放进namesNoO,完全忽略了这个名字可能已经包含'o'的情况
正确实现方式(两种可选)
方式1:使用字符串includes方法(简洁高效)
var names = ['octavia', 'peter', 'olive', 'ava', 'aiden']; var namesO = []; var namesNoO = []; // 遍历数组中的每个名字 for (let i = 0; i < names.length; i++) { const currentName = names[i]; // 判断当前名字是否包含'o',再决定放入哪个数组 if (currentName.includes('o')) { namesO.push(currentName); } else { namesNoO.push(currentName); } } console.log(namesO, namesNoO);
方式2:仅用for循环(严格符合"仅允许for循环和.push()"要求)
如果不能使用includes()这类字符串方法,可通过内部循环标记是否存在'o':
var names = ['octavia', 'peter', 'olive', 'ava', 'aiden']; var namesO = []; var namesNoO = []; // 外层循环遍历每个名字 for (let i = 0; i < names.length; i++) { const currentName = names[i]; let hasO = false; // 内层循环遍历当前名字的所有字符,检查是否有'o' for (let j = 0; j < currentName.length; j++) { if (currentName[j] === 'o') { hasO = true; break; // 找到'o'就停止遍历,避免无意义循环 } } // 根据标记结果,将名字放入对应数组 if (hasO) { namesO.push(currentName); } else { namesNoO.push(currentName); } } console.log(namesO, namesNoO);
两种方式都能得到你期望的结果:
namesO:['octavia', 'olive']namesNoO:['peter', 'ava', 'aiden']
内容的提问来源于stack exchange,提问作者Alvaro Vasquez
相关产品推荐
相关产品推荐

