我想在不使用 .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/