我似乎无法绕过这个。我想要的是一个文本框,输入它1234,12345,12346并返回传递的最长字符串的整数。所以上面会返回6。
我有以下带有文本框的Javascript代码:
var titleInput = document.getElementById("textBoxValue");
function countString()
{
var string = titleInput.value; // Does not work
//var string = ["123", "1234"]; works with out text box returns 4 hard coded
console.log(string); // returns ["123, 1234"]
var largest = 0; // set largest to 0
for (var i = 0; i < string.length; i++) {
if (string[i].length > largest) {
largest = string[i].length;
}
}
console.log(largest);
}
countString();
我不明白为什么它在硬编码时起作用,但是当从文本框提交时它不会。
答案 0 :(得分:2)
要从文本框中获取数组,可以使用
var titleInput = document.getElementById("text"),
arr = titleInput.value.split(', ');
要获得最大长度,您可以将Math.max
与其中一个
ES5 reduce
:
arr.reduce(function(prev, curr) {
return Math.max(prev, curr.length)
}, 0);
ES5 map
:
Math.max.apply(null, arr.map(function(str){
return str.length;
}));
ES5 map
,简化了ES6 spread operator和arrow functions:
Math.max(...arr.map(str => str.length));
答案 1 :(得分:0)
对于代码的功能,您必须使用split()方法将文本框的值拆分为数组,并将其用作“字符串”变量(避免对变量名使用保留字!)。否则,使用string [i]语句,您将访问字符串的各个字符,而不是逗号分隔的实际子字符串。所以你的功能应该像这样结束:
var titleInput = document.getElementById("textBoxValue");
function countString() {
var str = titleInput.value.split(',');
console.log(str);
var largest = 0;
for (var i = 0; i < str.length; i++)
if (str[i].length > largest)
largest = str[i].length;
console.log(largest);
}
countString();