Javascript 在数组中查找字符串
我在使用黑客等级工具 在那里,用户提供的所有输入都是一个字符串 因此,用户提供的输入将是Javascript 在数组中查找字符串,javascript,Javascript,我在使用黑客等级工具 在那里,用户提供的所有输入都是一个字符串 因此,用户提供的输入将是 1,2,3,4,5,可被视为“1”、“2”、“3”、“4” 现在,我想把它转换成数字数组 if (input) { if (input.split(',').indexOf("") > - 1) { console.log("invalid input") } else { input = input.split(',').map(Number); } } else { input =
1,2,3,4,5
,可被视为“1”、“2”、“3”、“4”
现在,我想把它转换成数字数组
if (input) {
if (input.split(',').indexOf("") > - 1) { console.log("invalid input") }
else { input = input.split(',').map(Number); }
} else {
input = [1, 2, 3, 5, 1, 5, 9, 1, 2, 8];
}
在这里,我检查是否有指定的输入,如果是,它将接受用户定义的输入,否则它将接受我定义为inpurt
现在,用户提供的输入也可以是字符串,在这种情况下,我想抛出一个错误,说“无效输入”
为此我想到了这样的事情
if (input.split(',').indexOf("") > - 1) { console.log("invalid input")
但这似乎不起作用,有人能帮我弄清楚我该怎么做吗
更新:当我说用户提供的输入可以是字符串时,我的意思是他可以提供类似“1,2,3,abc”的内容,这是无效的输入(因为它包含abc)
示例:1,2,3,4,当控制台日志给出“1,2,3,4”时,这是一个基本上包含数字的字符串(一个有效输入)
但是
本文件的输入
1、2、3、4abc是无效输入,因为它由非数字的4abc组成
所以当我这么做的时候
input = input.split(',').map(Number);
对于以上,它可能会给我
[1,2,3,NaN]
好的,现在我知道你需要什么了,谢谢 这是一个非常简单的检查,可以过滤出错误的数字:
const numbers = input.split(',').map(Number)
const filtered = numbers.filter(n => !isNaN(n))
因此,在本例中,Number()无法解析的数字将返回NaN
NaN
是falsy,因此将被过滤掉,因此filtered
数组只有数字。要清楚,!!n
仅表示将n作为严格布尔值计算;所以法尔西变成了一个真正的谎言。如果你只是使用n
的话,效果是一样的,但是我认为将其转换为bool更为明确
如果要抛出错误,可以测试:
if (numbers.length > filtered.length) throw new Error('Invalid Input');
保罗的回答几乎是正确的。不过,在filter函数中,还需要解析数字,然后检查它是否不是
NaN
const numbers = input.split(',')
.filter(n => !isNaN(parseInt(n, 10)))
你可以像下面这样做
var number = ['1', '2', 'a', 'b', '4', '5', '7']
function check() {
var s = 0;
for (var i=0; i < arguments.length; i++) {
if(!isNaN(arguments[i])){
number[s] = arguments[i];
console.log(number[s++]);
}
}
}
check(...number);
var number=['1','2','a','b','4','5','7']
函数检查(){
var s=0;
for(var i=0;i
好的,我之所以使用这个方法,是因为我不想使用迭代数组的方法,而是希望使用一次迭代来完成这项工作
上面的答案令人惊讶,但出于某种原因,我也想分享我的答案
if (input) {
input = input.map(number => {
if (!Number(number)) console.log("Error: Contains a non number")
if (Number(number)) return Number(number)
}) else {
input = [7, 8, 4, 9, 9, 15, 3, 1, 10];
}
inpurt
ininpurt=input.split(',').map(Number)代码>是一个打字错误,对吗?不是。我将input
值存储在inpurt
中,但是没有具体的原因,如果(!input)input=[1,2,3,5,1,5,9,1,2,8],我不明白您所说的“用户提供的输入也可以是字符串”是什么意思。您之前说过所有输入都是字符串?您可以使用inpurt.push(input)4abc
是一个十六进制数。这将不允许0
,即使它是一个完全有效的number
。要排除NaN
,您可以使用.filter(n->!number.isNaN(n))
相反,因为您的方法排除了0
。很好的捕获,谢谢@KarelG,我显然是想太聪明了为什么parseInt
?完全没有必要,对不起。旧习惯;习惯于一次完成而不使用映射。但是,parseInt
比使用Number
构造更不可靠。使用eg'1001,2,3'
作为输入来执行此操作。001
在OP的上下文中无效,但在您的代码中有效。parse int中的n,10是什么意思?n是您试图解析的字符串,而10是基数
和表示要使用的数字系统的可选数字(从2到36)。根据