【问题标题】:Each letter once uppercase每个字母一次大写
【发布时间】:2020-09-03 20:06:57
【问题描述】:

javascript函数返回一个字符串数组,它包含输入字符串的所有可能的大写字母,一次一个顺序。

uppercase("hello") ➞ ["Hello", "hEllo", "heLlo", "helLo", "hellO"]

我试过的是

const helloCapital = (str) => {
  let a = [];
  for (let i in str) {
    a.push(str[i].toUpperCase() + str.slice(1));
  }
  return a;
};

但它给出了奇怪的结果

[ 'Hello', 'Eello', 'Lello', 'Lello', 'Oello' ]

【问题讨论】:

  • str.slice(1) 在您的示例中将始终为“ello”。
  • ohh..right...如何修复并获得结果
  • str[i].slice(1)

标签: javascript arrays string ecmascript-6


【解决方案1】:

这看起来像是对课程或挑战网站的挑战。

如果是这样的话,来这里寻求答案真的非常不酷。

但是,既然我已经在这里了,这是一个可行的解决方案。

const capitals = s => Array.from(s,(_,i)=>s.slice(0,i)+_.toUpperCase()+s.slice(i+1))

更新:解释代码

Array.from 适用于可迭代对象,例如字符串、数组和 ArrayLike 对象。

它调用你传递的函数作为迭代的每个元素的第一个参数,在本例中为字符串。

该函数接收可迭代的 1 个元素(_)和该元素的位置(i

所以这个函数返回了 3 个东西的串联: * 原字符串从0到i的子串 * 可迭代的当前元素,或当前字符,toUpperCase() * 原字符串从i+1到字符串末尾的子字符串。

【讨论】:

  • 这是一场竞争性考试,但昨天已经结束。我从昨天开始尝试,无处可去,所以......
  • 这个是处理单个还是两个字符长度的字符串?
  • 对代码的一点解释会很有用先生......提前谢谢
  • @MohammadUsman,是的,它适用于单字符串或双字符串
  • @gunal,我已经添加了解释
【解决方案2】:

使用数组数组映射,

var str = "hello";

var capitals = Array.from(str).map((e, i, ar) => {

  let r = [...ar];
  r[i] = ar[i].toUpperCase();
  return r.join('');
});

console.log(capitals)

【讨论】:

    【解决方案3】:

    您的逻辑是错误的,要工作,您需要将字母前的切片与大写字母和字母后的切片连接起来。

    function capitalizeEachLetter (text) {
      return Array.from(text, (letter, index) =>
        text.slice(0, index) + letter.toUpperCase() + text.slice(index + 1)
      );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多