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
in
inpurt=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)。根据