在整数数组中获取第一个值后,parseInt返回NaN

时间:2017-04-12 07:14:03

标签: javascript

我能够推送数组中的第一个整数元素。之后,它将每个输入值作为NaN。

如何在运行时删除数组输入中的空格。 正如Ryan所说readLine正在返回一些不可解析为整数的东西。

process.stdin.resume();
process.stdin.setEncoding('ascii');

var input_stdin = "";
var input_stdin_array = "";
var input_currentline = 0;

process.stdin.on('data', function (data) {
    input_stdin += data;
});

process.stdin.on('end', function () {
    input_stdin_array = input_stdin.split("\n");
    main();    
});

function readLine() {
    return input_stdin_array[input_currentline++];
}

/////////////// ignore above this line ////////////////////


function main() {


    var n = parseInt(readLine());

    var a = [];



        for(var i=0;i<n;i++)
        {
         /*I am able to get first input but not for next iteration input value taken as NaN*/
         var no = parseInt(readLine(),10);

         console.log(readLine())


           a.push(no);



        }







}

例如,

输入:1 2 3 4 5

输出:1 NaN NaN NaN NaN

1 个答案:

答案 0 :(得分:1)

根据给定的输入1 2 3 4 5,它将失败,因为数字之间有空格。对于除数字之外的任何输入,parseInt都会返回NaN

你可以自己尝试一下:

parseInt('1 2 3 4 5', 10) // returns 1
parseInt('12345', 10) // returns 12345

您可以在此处详细了解它(以及parseInt的替代方案):https://coderwall.com/p/5tlhmw/converting-strings-to-number-in-javascript-pitfalls

你可以做的是验证输入并删除所有斜杠:

"1 2 3 4 5".replace(/\s/g, ""); // "12345"

这将使您的函数在与其他输入失败时很好地处理数字输入。它看起来像你的函数应该处理各种输入,而不是使用RegEx过滤掉像空格一样的东西(并且,正如古老的格言所说,you now have two problems