JavaScript-在不影响索引的情况下将元素插入数组



我已经处理了一段时间这样的问题,试图弄清楚如何处理索引。问题是:

我有一个字符串:thisIsGreat使用的基本操作如下:

var str = "thisIsGreat"; 
str = str.split(''); //Making it an array
.....
str = str.join(''); //String it back again
console.log(str);

所需输出:["t","h","i","s"," ","I","s"," ","G","r","e","a",t"]

我很难在不影响索引的情况下在这些单词之间插入空格。我试过这样的东西,但没有用。

for (var i = 0; i < str.length; i++){
     if (str[i]+1 == (str[i].toUpperCase())+1)
      str[i] = " ";
}

有办法解决这个问题吗?有什么想法吗?

您可以使用带有正向前瞻的替换。

var str = "thisIsGreat";
   
str = str.replace(/(?=[A-Z])/g, ' ').split('');
document.write('<pre>' + JSON.stringify(str, 0, 4) + '</pre>');

您的问题不是很清楚,如果您只想在每个大写字母之前插入一个空格,这对正则表达式来说相当容易:

r = "thisIsGreat".replace(/[A-Z]/g, " $&");
alert(r)

使用您自己的逻辑

var str = "thisIsGreat"; 
str = str.split(''); //Making it an array
var result = [];
for (var i in str){
 if (str[i]+1 == (str[i].toUpperCase())+1){
  result.push(" ");
  result.push(str[i]);
 }else{
  result.push(str[i]);
  }
}
result = result.join(''); //String it back again
console.log(result);

如果您不希望结果为字符串,只需最后删除连接即可。

https://jsfiddle.net/Ldp58onu/2/

只需反转for循环。

for (var i = str.length - 1; i >= 0; i--){
     if (str[i]+1 == (str[i].toUpperCase())+1)
      str[i] = " ";
}
'thisIsGreat'.replace(/([A-Z])/g,' $1').split('').join('", "')
//Output: "t", "h", "i", "s", " ", "I", "s", " ", "G", "r", "e", "a", "t"

最新更新