【问题标题】:Adding element with the splice method使用拼接方法添加元素
【发布时间】:2019-11-24 13:58:56
【问题描述】:
我正在尝试使用 javascript 拼接方法在数组中的每个大写字母之前添加一个“-”,但它不起作用。我不知道我做错了什么。下面是我的代码。
function spinalCase(str) {
let strArr = [];
for(let i = 0; i < str.length; i++){
strArr.push(str[i]);
}
for(let i = 0; i < strArr.length; i++){
if(strArr[i] !== strArr[i].toLowerCase()){
strArr.splice(strArr.indexOf(strArr[i]),0, "-");
}
}
console.log(strArr);
}
spinalCase('thisIsSpinalTap');
【问题讨论】:
标签:
javascript
arrays
string
add
splice
【解决方案1】:
当您使用 splice 添加新元素时,您将增加数组的 length 并且循环永远无法完成。如果您使用从数组末尾到开头的循环,则可以避免此问题。
function spinalCase(str) {
let strArr = [];
for (let i = 0; i < str.length; i++) {
strArr.push(str[i]);
}
// Work the loop from the end to the beginning
for (let i = strArr.length - 1; i >= 0 ; i--) {
if (strArr[i] !== strArr[i].toLowerCase()) {
strArr.splice(strArr.indexOf(strArr[i]), 0, "-");
}
}
console.log(strArr.join(''));
}
spinalCase('thisIsSpinalTap');
【解决方案2】:
我知道你想使用 splice,但这里有一个小的正则表达式解决方案;以防万一。
function spinalCase(str) {
return str.replace(/[A-Z]/g, "-$&").toLowerCase();
}
console.log(spinalCase("thisIsSpinalTap"))
// this-is-spinal-tap
【解决方案3】:
你改变了你的数组:
strArr.splice(strArr.indexOf(strArr[i]),0, "-");
所以strArr.length 不是循环for(let i = 0; i < strArr.length; i++) 的常量