我正在处理以下代码问题。问题看起来像这样
说明
编写一个函数大写,它将一个字符串(单词)作为参数。函数必须返回一个有序列表,其中包含字符串中所有大写字母的索引。
实施例
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]。 有没有什么办法解决这一问题?
答案 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