【问题标题】:Get JS to recognize white spaces .split()让 JS 识别空格 .split()
【发布时间】:2014-02-08 09:06:21
【问题描述】:

我编写了这个函数来记录给定字符串中的一个新字符串,其中字母应该是字母表中的下一个,并且所有元音都是大写的。

现在我遇到了无法按照我想要的方式拆分字符串的问题。现在,当我真的希望在空格上拆分字符串时,这些单词被拆分为数组中的单独字符。谁能解释为什么会这样?

当我在拆分方法中的“”之间放置一个空格时,我只会得到所有字符和“未定义”应该在空格的位置。感谢您的帮助!

function replace(str) {
  var newStr = [];
  var vowels = 'aeiou';
  var alpha = [  'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'
             ];
  str = str.split("");
  newStr.length = str.length;
  for(var i = 0; i < alpha.length; i++) {
    for(var j = 0; j < str.length; j++) {
      if(alpha[i] === str[j]) {
         newStr[j] = (alpha[i + 1]);
      }
    }
  }
  for(var k = 0; k < vowels.length; k++) {
    for(var x =0; x < newStr.length; x++){
      if(vowels[k] === newStr[x]) {
        newStr[x] = vowels[k].toUpperCase("");
    }
  }
}
  return newStr;
}

console.log(replace("today is great"));

【问题讨论】:

  • 我收到[ 'today', 'is', 'great' ]。有什么问题?
  • 是的,问题肯定出在拆分后的逻辑上,而不是拆分本身。

标签: javascript split


【解决方案1】:
str = str.split(" ");

这会将您的字符串拆分为 ["today", "is", "great"]。

当你到达​​p>

if(alpha[i] === str[j]) {

您永远不会进入 if 块,因为您将“a”与“today”或“a”与“is”进行比较,等等。我认为您需要进一步分解字符串才能完成此操作。

我建议如下:

function replace(str) {
    var alpha = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'],
        vowels = 'aeiou',
        newStr = [],
        i, j, k;

    // split everything into words
    str = str.split(' ');

    for (i = 0; i < str.length; i++) {

        // split everything into letters
        str[i] = str[i].split('');

        // make sure newStr has a similarly construction to str
        newStr[i] = [];

        for (j = 0; j < str[i].length; j++) {
            for (k = 0; k < alpha.length; k++) {
                if (alpha[k] === str[i][j]) {

                    // subsitute each letter
                    newStr[i][j] = alpha[k + 1];
                }
            }
        }
    }

    for (i = 0; i < newStr.length; i++) {

        // join newStr up to be an array of words instead of an array of an array of letters
        newStr[i] = newStr[i].join('');

        for (k = 0; k < vowels.length; k++) {

            // replace each vowel with the uppercase version
            newStr[i] = newStr[i].replace(vowels[k], vowels[k].toUpperCase());
        }
    }

    return newStr;
}

如果你真的想看到 "UpEbz jt hsfbU" 而不是 ["UpEbz", "jt", "hsfbU"],只需将 return newStr 更改为 return newStr.join(' ');

【讨论】:

  • 谢谢格雷。我是 js 新手,所以感谢您彻底解释您的功能。
【解决方案2】:

要在空格上拆分字符串尝试:

str = str.split(/\s+/);

【讨论】:

    猜你喜欢
    • 2017-09-17
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多