大写字母的功能,错误

时间:2014-01-24 20:37:13

标签: javascript arrays for-loop

这个数组应该大写字符串中每个单词的第一个字母。我一直收到错误:" TypeError:array [i]未定义"。

function LetterCapitalize(str) { 
  var array = str.split(" ");
  for(var i = 0; i<=array.length;i++){
    var secondArray = array[i].split();
    secondArray[0]=secondArray[0].toUpperCase();
    secondArray=secondArray.join();
    array[i] = secondArray
  }
  return array;

}

5 个答案:

答案 0 :(得分:9)

问题是你的for循环运行时间过长。在您的情况下将<=更改为<

for(var i = 0; i < array.length; i++) {
    ...
}

此外,作为Mehdi points out,如果您想要按每个字符使用array[i].split('');拆分字符串,并将它们重新连接在一起时,请使用secondArray.join('');。如果你修复了所有这些,该函数仍将返回一个数组。如果您想让它返回一个字符串,请使用return array.join(' ')

但您可能需要考虑使用正则表达式替换:

function LetterCapitalize(str) { 
    return str.replace(/\b\w/g, function(c) { return c.toUpperCase(); });
}

答案 1 :(得分:2)

试试这个:只需把&lt;符号,NOT =,因为你会再重复一次。

使用&lt; ,不是&lt; =

i ++增加i超过数组长度,因此错误。

function LetterCapitalize(str) { 
  var array = str.split(" ");
  for(var i = 0; i<array.length;i++){
    var secondArray = array[i].split();
    secondArray[0]=secondArray[0].toUpperCase();
    secondArray=secondArray.join();
    array[i] = secondArray
  }
  return array;

}

答案 2 :(得分:1)

如果我向您的函数发送一个简单的对象会怎样?喜欢 {}?

  
      
  • 有一件事,你必须确保在把它当作字符串处理之前收到一个字符串......
  •   
  • 另外,在循环之外声明你的var“secondArray”,你不需要每次都创建它......
  •   
  • 再次,而不是像这样使用“for”:“for(var i = 0; i&lt; = array.length; i ++)”,使用它如下:“for(var i = 0,count =   array.length;我&lt; =计数; i ++)“,好吗?
  •   
function LetterCapitalize(str) { 
      var array = str.split(" ");
      for(var i = 0; i<=array.length;i++){
        var secondArray = array[i].split();
        secondArray[0]=secondArray[0].toUpperCase();
        secondArray=secondArray.join();
        array[i] = secondArray
      }
      return array;

    }

答案 3 :(得分:0)

我做了一些改动,不仅仅是大写,第一个字母。这取决于你。

function letterCapitalize(str) { 
  var array = str.split(" "), aux, arr = [];
  for(var i = 0, count = array.length; i<count; i++){
      aux = array[i];
      aux = aux.substring(0,1).toUpperCase() + aux.substring(1).toLowerCase();
      arr.push(aux);

  }
  return arr;

}
console.log(letterCapitalize('hEllo WOrld'));//["Hello", "World"];

答案 4 :(得分:0)

//A slightly different "vanilla" version

function letterCapitalize (str) { 

    var array = str.split('');

    for (var i = 0; i <= array.length;) {

        if (array[i - 1] == " ") {
            array[i] = array[i].toUpperCase();
        } else if (i == 0) {
            array[i] = array[i].toUpperCase();
        }

        i++;
    }
    str = array.join('');
    return str;
}



letterCapitalize("hello world, hello world!");