You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅用while循环通过纯ECMAScript 5将数组元素转为大写

解决仅用while循环实现数组元素转大写的问题

看起来你卡在了纯ES5环境下只用while循环完成字符串大写转换的需求上,我来帮你理清楚问题并给出正确的解法,先看看你原来思路里的问题,再一步步解决:

你现有代码的问题

  • 你的change对象里没有包含names数组中的元素(比如rob、dwayne这些),所以即使逻辑正确也无法匹配到目标值
  • 循环嵌套逻辑混乱:while循环放在了for循环外面,而且变量i的声明位置不对,导致while循环里访问i时会出现未预期的行为
  • 数组赋值错误:UpperCase = change.value[i];会直接覆盖整个UpperCase数组,而不是往里面添加元素
  • 多余的嵌套遍历:change是单层对象,内层的for (var prop in obj)完全没必要

正确解法(分两种场景)

场景1:允许使用字符串的toUpperCase方法(仅限制数组方法)

如果只是不能用数组的push、map等方法,但可以用字符串的内置转换方法,那这个解法最简单,只用一层while循环,通过数组索引直接赋值:

var names = ['rob', 'dwayne', 'james', 'larry', 'steve'];
var UpperCase = [];
var i = 0;

// 外层while循环遍历names数组的每个元素
while (i < names.length) {
    // 转大写后通过索引存入UpperCase数组
    UpperCase[i] = names[i].toUpperCase();
    i++;
}

console.log(UpperCase); // 输出 ["ROB", "DWAYNE", "JAMES", "LARRY", "STEVE"]

场景2:完全不能使用任何内置方法(手动实现大写转换)

如果要求完全不能用任何方法(包括toUpperCase),那我们可以利用ASCII码来手动转换:小写字母a-z的ASCII码是97-122,对应的大写字母是65-90,每个小写字母的ASCII码减去32就得到大写,这时候需要嵌套while循环来遍历每个字符串的字符:

var names = ['rob', 'dwayne', 'james', 'larry', 'steve'];
var UpperCase = [];
var outerIndex = 0;

// 外层while循环遍历names数组
while (outerIndex < names.length) {
    var currentName = names[outerIndex];
    var upperName = '';
    var innerIndex = 0;
    
    // 内层while循环遍历当前字符串的每个字符
    while (innerIndex < currentName.length) {
        var charCode = currentName.charCodeAt(innerIndex);
        // 判断是否是小写字母,是则转大写
        if (charCode >= 97 && charCode <= 122) {
            charCode -= 32;
        }
        // 把转换后的字符拼接到结果字符串
        upperName += String.fromCharCode(charCode);
        innerIndex++;
    }
    
    // 把转换好的字符串存入结果数组
    UpperCase[outerIndex] = upperName;
    outerIndex++;
}

console.log(UpperCase); // 输出 ["ROB", "DWAYNE", "JAMES", "LARRY", "STEVE"]

这两种解法都严格遵循了你的要求:仅使用while循环、纯ES5语法,没有使用数组的push、map等方法(场景1用了字符串的toUpperCase,场景2完全手动实现转换)。

内容的提问来源于stack exchange,提问作者Pepdbm 7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:09:05