为什么array [0] = array [0] .toUpperCase()有效,而array [0] [0] = array [0] [0] .toUpperCase()不起作用

时间:2018-10-12 09:19:31

标签: javascript arrays regex string

要清除: 我不想知道如何大写,但是我想知道为什么我可以在一维而不是二维上更改它

我正在做一些编码挑战以熟悉JavaScript。

我将给定字符串中每个单词的首字母大写。 我通过String.match(regex);

将字符串分割成单词分隔的数组
var word_array = str.match(/\w(\w)*/g);

然后我从单词中创建另一个字母分隔的数组来更改单个字母。 (也使用正则表达式)

letter_array = word_array[i].match(/\w/g);
letter_array[0] = letter_array[0].toUpperCase();

这很好用。

但是我希望它短一些,所以我尝试对word_array的第二维上的字母执行操作,但是完全没有效果。

word_array[i][0] = word_array[i][0].toUpperCase();

完整代码段

const input = document.querySelector("#string"),
      button = document.querySelector("#DOIT");

button.addEventListener("click", function(){
  LetterCapitalize(input.value);
});

function LetterCapitalize(str) { 
var word_array = str.match(/\w(\w)*/g);
  for(let i = 0; i < word_array.length; i++){
      //This part works
      letter_array = word_array[i].match(/\w/g);
      letter_array[0] = letter_array[0].toUpperCase();
      word_array[i] = letter_array.join("");
      
      //this doesn't
      /*
      word_array[i][0] = word_array[i][0].toUpperCase();
      console.log(word_array[i][0]);
      */
  }
  console.log(word_array);
  str = word_array.join(" ");
  return str;
}
<input id="string" type="text"/>
<button id="DOIT">DO IT</button>

1 个答案:

答案 0 :(得分:0)

这是行不通的,因为字符串在javascript中是不可变的。

  - @testrun.testcase.reject(&:empty?).each do |i|
    - trClass = ""
    - trClass = "danger" if @testrun.testcases_output["#{i}"]["status"]=="Failed"
    - trClass = "success" if @testrun.testcases_output["#{i}"]["status"]=="Success"
    tr{class: trClass} 
      td = "#{i}"
当您将字符串转换为自然可变的列表/数组时,

代码被截断了。尽管id指出这个问题可能是重复的。这是capitalization in javascript question