javascript - 查找字符串中缺失的字母 Javascript

标签 javascript

因此输入是按字母顺序排列的一串字母。那里的某个地方,有一封信不见了。我必须归还丢失的信。我在下面发布了我的代码。它得到了很好的评论,这些评论比我在这里能解释得更好。我将在下面解释我的问题。

function fearNotLetter(str) {
  var charCodes;
  var test;
  var offendingNumber;
  var numToString;

  // i starts at 1, increments to str.length
  for (var i = 1; i < str.length; i++) {
    // Char code of last letter minus char code of second last letter,
    // Char code of second last letter minus char code of third last letter, etc.
    // Repeat on a loop and set result equal to test each time.
    test = str.charCodeAt(str.length - [i]) - str.charCodeAt(str.length - [i + 1]);
    console.log(test);

    // If charCode A - charCode B == 1, then letters are in order
    // alphabetically and test returns 1. 

    // If charCode A - charCode B > 1, then letters missing from string.

    // So if difference between char codes is more than 1,
    // return missing char code and convert to string.
    if (test > 1) {
      offendingNumber = str.charCodeAt(str.length - [i]);
      numToString = String.fromCharCode(offendingNumber);
      console.log(numToString);
    } // End of if.
    // If no letters missing from input, return undefined.
    else {
      return undefined;
    } // End of else.
  } // End of loop.
} // End of function.

// Here is the input str
fearNotLetter("abce");

问题就在这里。如果我输入“abce”,我会丢失 d。 console.log(test) 返回 2,我可以得到丢失的字母。太棒了。

如果我输入“abcef”(与之前相同的字符串,最后加上 f),我仍然缺少 d。测试返回 1,好像没有丢失字母,但 d 仍然丢失。

仅当缺少的字符适合字符串中的倒数第二个空格时,我的程序才有效。 “lmnp”有效,但“lmnpqrs”无效。

我的循环显然是在迭代字符串中的每个字符,因为它可以从长字符串“abcdefghijklmnopqrstuvxyz”中找出丢失的 w。当缺少的字符后面有多个字符时,为什么我的循环会崩溃?它的行为就好像我在循环之外调用 console.log(test) ,并且只返回最后一次迭代。我尝试将测试推送到数组,但这没有任何帮助。

最佳答案

有几个问题:您的索引是困惑的(即相差一); undefined 的返回应该在循环之外,而不是在循环内;您在不应该使用的地方使用了 str.length;当你不应该将迭代变量放入括号时:

function fearNotLetter(str) {
    var difference;
    var missingCharCode;

    // i starts at 1, increments to str.length
    for (var i = 1; i < str.length; i++) {

        // Char code of last letter minus char code of second last letter,
        // Char code of second last letter minus char code of third last letter, etc.
        // Repeat on a loop and set result equal to test each time.
        difference = str.charCodeAt(i) - str.charCodeAt(i - 1);

        // If charCode A - charCode B == 1, then letters are in order
        // alphabetically and test returns 1. 

        // If charCode A - charCode B > 1, then letters missing from string.

        // So if difference between char codes is more than 1,
        // return missing char code and convert to string.
        if (difference > 1) {
            missingCharCode = str.charCodeAt(i) - 1;
            return String.fromCharCode(missingCharCode);
        } // End of if.
    } // End of loop.

    return undefined;
} // End of function.

关于javascript - 查找字符串中缺失的字母 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36241309/

相关文章:

javascript - Javascript 中的通用 is_blank?

javascript - 下划线 JavaScript 查找复杂对象中键存在的值

javascript - 带单引号字符串的 DataBind 未调用 javaScript 函数

javascript - 打开 Canvas 菜单后如何将背景位置保持在同一位置?

javascript递归函数不停止执行

javascript - 在 Solidity 0.4.6 中使用 send() 函数时合约抛出无效地址

php - 如何为外部站点调用基于 javascript 的表单

javascript - 按 json 数组中的键/值过滤

javascript - 使用 LocalStorage 和 AngularJS 的缓慢应用程序

javascript - JSON数组与键值JSON结构