在数组中查找字符串

时间:2018-12-19 07:19:06

标签: javascript

我正在使用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]

4 个答案:

答案 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()无法解析的数字将返回NaNNaN是虚假的,因此将被过滤掉,因此filtered数组只有数字。要清楚,!!n仅意味着将n评估为严格的布尔值;所以虚假成为真正的错误。如果您只是使用n,则其工作原理相同,但我认为将其强制转换为布尔值更明确

如果要抛出错误,可以进行测试:

if (numbers.length > filtered.length) throw new Error('Invalid Input');