javascript - 使用此 .length & .split() 的任何替代方法?

标签 javascript arrays

我想在不使用 .split() 的情况下拆分 textBox 的下部、上部和值,我也想要 在不使用 .length 的情况下查找字符串的长度。任何人都可以解决我的问题我试过但是 我找不到这个问题的确切逻辑。

var lowercase = "abcdefghijklmnopqrstuvwxyz";
var uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

function Print() {
  var input = document.getElementById('demo').value;
  document.write(document.getElementById('demo1').innerHTML = toUpper(input));

}

function toUpper(input) {
  var upperCase = uppercase.split(""); //other way to split uppercase
  var lowerCase = lowercase.split(""); //other way to split lowercase
  var inputText = input.split(""); //other way to split input
  var newText = "";
  var found;

  for (var i = 0; i < inputText.length; i++) { //not using .length to other way to find the size of inputText
    found = false;
    for (var ctr = 0; ctr < lowerCase.length; ctr++) { //not using .length other way to find the size of lowerCase
      if (inputText[i] == lowerCase[ctr]) {
        found = true;
        break;
      }
    }
    if (found) { //true
      newText = newText + upperCase[ctr];

    } else {
      newText = newText + inputText[i];
    }
  }
  return newText;
}

最佳答案

您可以使用数组函数 reduce 计算字符串的长度。

Reduce 遍历数组中的所有元素并执行您提供的函数以将其减少为一个值,您可以阅读更多 here . 要减少对字符串的处理,您需要使用 Array.from,如下所示:

Array.from(lowerCase).reduce((sum, carry) => sum + 1, 0) // 26

Reduce 接受一个起始参数,我们在这里将其设置为零。

这样您就不需要使用拆分或长度函数。

您也不需要检查输入是否为字符串,您可以使用 charCodeAt() 和 fromCharCode()。

如果您获取输入并使用 Array.from() 然后使用 forEach 循环遍历它,您可以获得如下所示的内容:

    function print() {
        const input = document.querySelector('#input').value;

        document.querySelector('#target').value = stringToUpper(input);
    }

    function stringToUpper(input) {
        let output = "";

        Array.from(input).forEach(char => output += charToUpper(char));

        return output;
    }

    function charToUpper(char) {
        let code = char.charCodeAt(0);

        code >= 97 && code <= 122 ? code -= 32 : code;

        return String.fromCharCode(code);
    }
<div>
    <input id="input" placeholder="enter text here">
</div>
<button onclick="print()">To Upper</button>
<div>
    <input id="target">
</div>

关键行是我们获取输出并向其添加字符(如上)的地方:

output += charToUpper(char)

如果你不知道箭头函数,你可以阅读更多here

这一行:

        code >= 97 && code <= 122 ? code -= 32 : code;

只是检查字符是否为小写(97 到 122 之间的数字),如果是,则减去 32 使其变为大写。

它是减法而不是加法的原因是在 utf-16 中,字符的布局如下:

ABCDEFGHIJKLMNOPQRTUWXYZabcdefghijklmnopqrtuwxyz

参见 here更多

关于javascript - 使用此 .length & .split() 的任何替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51224347/

相关文章:

arrays - 数组的 IsEmpty() 函数

arrays - 如果我将一个 char 数组初始化为零/{0},我是否必须以 null 终止?

c++ - 在运行时设置数组维度

javascript - WebStorm 不记得类型提示

javascript - 在js中创建包含php的数组

javascript - 更改根目录名称后,Webpack 开发服务器不监视文件

javascript - 尝试上下移动 div 时出现问题

javascript - 修改内置对象原型(prototype)

python - 在Python中的同一个图上绘制数组列表?

arrays - 使用数组键进行哈希到哈希的简单哈希