来自代码新闻的javascript索引

时间:2014-07-23 11:01:41

标签: javascript arrays indexof

我正在处理以下代码问题。问题看起来像这样

说明

编写一个函数大写,它将一个字符串(单词)作为参数。函数必须返回一个有序列表,其中包含字符串中所有大写字母的索引。

实施例

Test.assertSimilar(capitals('CodEWaRs'),[0,3,4,6]);

我的解决方案是

function capitals(word){
  var ara = []
  for(var i = 0; i < word.length; i++){
    if(word[i] == word[i].toUpperCase()){
      ara.push(word.indexOf(word[i]))
    }
  }
 return ara
}

每当我将字符串传递给它时,代码都能正常工作。我唯一的问题是我得到了重复拼写的相同索引。例如,大写字母(“HeLLo”)返回[0,2,2]而不是[0,3,4]。 有没有什么办法解决这一问题?

3 个答案:

答案 0 :(得分:1)

word.indexOf(word[i])返回第一个索引,您只需将i推送到数组上即可。

答案 1 :(得分:1)

说这个

ara.push(i)

而不是

ara.push(word.indexOf(word[i]))

当您说word.indexOf(word[i]))时,它会返回index获得word[i]的第一个L。因此,对于{{1}},它都会给出2。

答案 2 :(得分:0)

您可能会发现上述解决方案令人满意,但我认为我会在ES2015中提供更具功能性的方法。

const capitals = word => word.split('') // split word into an array

  .map((letter, idx) => letter === letter.toUpperCase() ? idx : false)
  // return a new array that gives the index of the capital letter

  .filter(num => Number.isInteger(num));
  // filter through each item in the new array and return 
  // a newer array of just the index values