【问题标题】:Insert Spaces into string at an index在索引处将空格插入字符串
【发布时间】:2020-05-16 19:01:37
【问题描述】:

我正在尝试解决这个 Codewars 问题。

任务

在这个简单的 Kata 中,您的任务是创建一个将字符串转换为墨西哥波浪的函数。您将收到一个字符串,您必须在一个数组中返回该字符串,其中一个大写字母是一个站着的人。

规则

  1. 输入字符串始终为小写,但可能为空。
  2. 如果字符串中的字符是空格,则将其作为空位传递。 例子 wave("hello") => ["Hello", "hEllo", "heLlo", "helLo", "hellO"]

My code so far is hosted on this repl.it

我的思考过程如下:

  1. 把参数变成数组
  2. 在 index 处操作数组的每个索引,然后重新调整前一个索引以形成波形
  3. 将数组转成字符串
  4. 在将其记录到控制台并重新启动循环之前重新插入空格

我很困惑,我的思绪被困在如何使用上

for(var j = 0; j < indexSpaceNumber.length; j++){ //join and add in the spaces at their former index before returning string strToArray[indexSpaceNumber[j]].slice(0, " "); }

在字符串中插入空格。

如果有任何指导或提示,将不胜感激。我觉得我很近,但又如此令人沮丧。

【问题讨论】:

  • 您能否在输入中添加多个单词的大小写?

标签: javascript arrays string split slice


【解决方案1】:

主要思想是:

  1. 迭代字符
  2. 将原始字符串中的字符替换为大写版本

您可以使用Array.from() 将字符串转换为数组,并将每个项目映射到一个新字符串。如果字符是空格,则返回错误的内容(示例中为空字符串)。创建数组后,过滤所有假值:

const wave = str =>
  Array.from(str, (c,i) => // convert the string to an array
    // replace the character with an uppercase version in the original string
    c === ' ' ?
    ''
    :
    `${str.substring(0, i)}${c.toUpperCase()}${str.substring(i + 1)}`
  ).filter(c => c)

const result = wave("hello") 

console.log(result)

【讨论】:

    【解决方案2】:

    对于带空格的字符串

    function wave(str) {
      let res = []
      str.toLowerCase().split('').forEach((v, i) => {
        if(v == ' ') return;
        res.push( str.substr(0, i) + v.toUpperCase() + str.substr(i + 1) )
      });
      return res
    }
    
    console.log(wave("hello hello"))

    【讨论】:

      【解决方案3】:

      我会递归;)

      您知道对于长度为 n 的字符串,您需要一个相同长度的数组。这就是你的退出条件。

      您可以在每次迭代时使用数组的长度来计算下一个字符串的形状:

      hello []            [Hello]              0: uppercase 1st char and append
      hello [Hello]       [Hello hEllo]        1: uppercase 2nd char and append
      hello [Hello hEllo] [Hello hEllo heLlo]  2: uppercase 3rd char and append
      ...
      

      const wave =
        (str, arr = []) =>
          str.length === arr.length
            ? arr
            : wave
                ( str
                , [ ...arr
                  ,   str.slice(0, arr.length)
                    + str[arr.length].toUpperCase()
                    + str.slice(arr.length + 1)
                  ]
                );
      
      console.log(wave('hello'));

      【讨论】:

        【解决方案4】:

        遍历字符串中的每个字符并构建 Slice str from start till current char + current char to upper case + Slice str from current char to end

        const wave = str => {
          const res = [];
          for (let i = 0; i < str.length; i++) {
            res.push(`${str.slice(0, i)}${str[i].toUpperCase()}${str.slice(i + 1)}}`);
          }
          return res;
        };
        
        console.log(wave("hi my name is rylan"));
        
        // Alternate way to do with Array.splice
        const wave2 = str => {
          const res = [];
          for (let i in str) {
            const temp = Array.from(str);
            temp.splice(i, 1, temp[i].toUpperCase());
            res.push(temp)
          } 
          return res.map(x => x.join(''));
        };
        
        console.log(wave2("hi my name is rylan"));

        【讨论】:

          猜你喜欢
          • 2011-05-17
          • 1970-01-01
          • 2011-04-30
          • 1970-01-01
          • 1970-01-01
          • 2020-10-22
          • 2016-01-05
          • 1970-01-01
          相关资源
          最近更新 更多