gpt4 book ai didi

javascript - 将数字传递给新生成的数组时无法设置未定义的属性

转载 作者:行者123 更新时间:2023-11-30 13:51:02 25 4
gpt4 key购买 nike

我正在编写代码,将句子中每个单词的首字母转换为大写,其余转换为小写。当我生成一个新数组 arr 并尝试将一个数字传递给它时,会出现错误。

Cannot set property '0' of undefined.

我不知道为什么会这样。

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();

要调整您现有的代码,在循环内部创建一个数组,更改那个数组,然后在末尾加入它并推送到外部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)

关于javascript - 将数字传递给新生成的数组时无法设置未定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58245863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com