Javascript-字符串大写函数引发奇怪的错误

时间:2018-11-25 13:48:02

标签: javascript string

堆垛机,请帮助我疲惫的初学者的大脑,让我知道我的位置。

我的函数接受小写字符串作为唯一参数。可以返回相同的字符串,并且每个单词中的所有偶数索引字符均大写。但是实际输出与我的预期输出不同。

例如:

async def get(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as resp:
            print(url, resp.status)
            print(url, await resp.text())

loop = asyncio.get_event_loop()     
tasks = [                           
    get("http://www.google.com"),
    get("http://www.google.com")
]
loop.run_until_complete(asyncio.wait(tasks))    
loop.close() 




async def get_via_thread(url):
    loop = asyncio.get_event_loop()
    try:
        response = await loop.run_in_executor(None, functools.partial(requests.get, url=url))

2 个答案:

答案 0 :(得分:2)

使用indexOf查找字符时,将获得 first 出现的索引,而不一定是您最初查看的那个的索引。同样,replace(在给定字符串值作为第一个参数时)将替换 first 出现的地方,不一定替换您感兴趣的那个地方。

这是一个修复程序,没有太多改变您的原始照片:

function toWeirdCase(string){
    string = string.split(" ");
    for (let i = 0; i<string.length; i++) {
        for (let x = 0; x < string[i].length; x++) {
            if (x % 2 == 0) {  
                // Only modify the single character of interest. The rest is sliced in
                string[i] = string[i].slice(0, x) + string[i][x].toUpperCase() + string[i].slice(x+1);
            }
        }
    }
    return string.join(" ");
}

console.log(toWeirdCase('harry enjoys reading books')) 
console.log(toWeirdCase('gooooooogle search in vain'));

替代

您也可以采用不同的方法,而不是将字符串拆分为单词,而只是在看到空格时重置标志。 在这里,您可以看到使用reduce实现的想法,从而产生了功能编程样式的解决方案:

function toWeirdCase(string){
    return [...string].reduce(
        ([str, j], c, i) => c === " " || j ? [str + c, 0] : [str + c.toUpperCase(), 1],
        ["", 0]
    )[0];
}

console.log(toWeirdCase('harry enjoys reading books')) 
console.log(toWeirdCase('gooooooogle search in vain'));

答案 1 :(得分:1)

基本上,当您连续使用相同字符时,您的代码会出现问题。前两个答案已正确解释了它们。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr>
   <td class="a 1">11</td>
   <td class="a 2">22</td>
   <td class="a 3">33</td>
  </tr>

  <tr>
   <td class="b 4">44</td>
   <td class="b 5">55</td>
   <td class="b 6">66</td>
  </tr>
</table>