我正在使用Hacker Rank工具。
在那儿,用户提供的所有输入都是一个字符串
因此,用户提供的输入将为
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)< / p>
示例:当控制台日志显示“ 1、2、3、4”时,该数字是1、2、3、4,该字符串基本上是具有数字的字符串(有效输入 )
但是
此输入
1、2、3、4abc是无效输入,因为它由4abc
组成,不是数字
所以当我这样做
input = input.split(',').map(Number);
以上所述,它可能会给我
[1,2,3,NaN]
答案 0 :(得分:1)
保罗的答案几乎是正确的。但是,在过滤器功能中,您还需要解析该数字,然后检查它是否不是NaN
。
const numbers = input.split(',')
.filter(n => !isNaN(parseInt(n, 10)))
答案 1 :(得分:1)
您可以执行以下操作
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);
答案 2 :(得分:1)
好的,所以我正在使用,因为我不想在数组上进行迭代的方法,而是希望通过一次迭代来完成作业。
以上答案非常了不起,但由于某些原因,我想也分享我的答案。
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];
}
答案 3 :(得分:0)
好的,现在我明白了您的需要,谢谢。
这是一个非常简单的检查,可以过滤出错误的数字:
const numbers = input.split(',').map(Number)
const filtered = numbers.filter(n => !isNaN(n))
因此,在这种情况下,Number()无法解析的数字将返回NaN
。 NaN
是虚假的,因此将被过滤掉,因此filtered
数组只有数字。要清楚,!!n
仅意味着将n评估为严格的布尔值;所以虚假成为真正的错误。如果您只是使用n
,则其工作原理相同,但我认为将其强制转换为布尔值更明确
如果要抛出错误,可以进行测试:
if (numbers.length > filtered.length) throw new Error('Invalid Input');