我正在编写代码,将句子中每个单词的首字母转换为大写,其余转换为小写。当我生成一个新的数组arr并尝试将数字传递给它时,会出现错误。
无法设置未定义的属性'0'。
我不知道为什么会这样。
function titleCase(str) {
var word = str.split(" ");
var arr = new Array();
for(var i = 0; i<word.length; i++){
arr[i][0] = word[i][0].toUpperCase();
if(word[i].length>1)
for(var j = 1; j<word[i].length; j++){
arr[i][j] = word[i][j].toLowerCase();
}
}
str = arr.join(' ');
return str;
}
titleCase("I'm a little tea pot");
非常感谢您的帮助!
[arr
最初是一个空数组,但是您尝试引用arr[i]
(并更改其属性)而没有首先在arr[i]
处创建任何内容:
arr[i][0] = word[i][0].toUpperCase();
要调整现有代码,请在循环中创建一个数组[[inside,更改that数组,然后在最后加入它并推入外部arr
:
function titleCase(str) {
var word = str.split(" ");
var arr = new Array();
for (var i = 0; i < word.length; i++) {
let newWordArr = [];
newWordArr[0] = word[i][0].toUpperCase();
if (word[i].length > 1) {
for (var j = 1; j < word[i].length; j++) {
newWordArr.push(word[i][j].toLowerCase());
}
}
arr.push(newWordArr.join(''));
}
str = arr.join(' ');
return str;
}
console.log(titleCase("I'm a little tea pot"));
但是我建议改用正则表达式:将第一个非空格字符放入捕获组,同时将后面的非空格字符放入另一个捕获组,然后将.replace
与第一组.toUpperCase()
和第二组.toLowerCase()
:const titleCase = str => str .replace( /(\S)(\S*)/g, (_, g1, g2) => g1.toUpperCase() + g2.toLowerCase() ); console.log(titleCase("I'm a little tea pot"));
(\S)
-匹配并捕获一个非空格字符(进入上面的参数g1)
(\S*)
-匹配并捕获零个或多个其后的非空格字符(进入上面的参数g2)
function titleCase(str) {
var word = str.split(" ");
var arr = new Array();
for(var i = 0; i<word.length; i++){
let newWord = '';
for(var j = 0; j < word[i].length; j++){
if(j === 0){
newWord += word[i][j].toUpperCase();
}
else {
newWord += word[i][j].toLowerCase();
}
}
arr.push(newWord);
}
str = arr.join(' ');
return str;
}
console.log(titleCase("I'm a little tea pot"));
titleCase("I'm a little tea pot");
function titleCase(str) {
var word = str.split(" ");
var arr = new Array();
var arr = []
for (var i=0;i<word.length;i++) {
arr[i] = [];
}
for(var i = 0; i<word.length; i++){
arr[i][0] = word[i][0].toUpperCase();
if(word[i].length>1)
for(var j = 1; j<word[i].length; j++){
arr[i][j] = word[i][j].toLowerCase();
}
}
str = arr.join(' ');
return str;
}
console.log (titleCase("I'm a little tea pot"));
只显示以您的样式(每个单词中的大写字母)显示此标题,可以使用以下方法进行此操作:
css
将其存档。#title {
text-transform: capitalize;
}
<span id="title">I'm a little tea pot</span>
如果要通过
javascript
获得此结果,则需要执行DOM操作。
document.getElementById('title').style.textTransform = 'capitalize';
<span id="title">I'm a little tea pot</span>
无法设置未定义的属性'0'。
此错误在arr[i][0] = word[i][0].toUpperCase()
发生,因为arr[i]
在您的代码段中未定义。
因此,您需要使用如下所示的arr
将新项添加到arr.push()
数组中;
function titleCase(str) {
var word = str.split(" ");
var arr = new Array();
for(var i = 0; i<word.length; i++){
console.log(`arr[${i}] is ${arr[i]}`);
arr.push(word[i][0].toUpperCase());
if(word[i].length>1)
for(var j = 1; j<word[i].length; j++){
arr[i] = arr[i] + word[i][j].toLowerCase();
}
}
console.log(arr);
return str;
}
console.log(titleCase("I'm a little tea pot"));