【问题标题】:Unable to remove NaN values from my function in JS [closed]无法从我的 JS 函数中删除 NaN 值 [关闭]
【发布时间】:2016-07-07 05:36:18
【问题描述】:

这个函数的目的是去除给定String的空格,然后将其转换为Number,最后将数字的每个字符压入一个空数组(即“24532”,应该压入数组中在 [2,4,5,3,2] 之后)。但是,当我在函数末尾控制台输出数组时——我在输出数组中收到 NaN 值。函数中的每一步对我来说都是有意义的,但我不确定我的错误在哪里。任何帮助将不胜感激!

function convert(numbers){
   var notString = parseInt(numbers.replace(/\s+/g, ''), 10),
   sNumber = notString.toString(),
   output =[];

   console.log(sNumber);

     for(var i = 0; i < sNumber.length; i+=1) {
       output.push(+sNumber.charAt[i]);    

   }
    console.log(output);

   } 

   convert("1 2 2 2 2");

【问题讨论】:

  • 问题是你在charAt之后有[]而不是()。所以应该是+sNumber.charAt(i)。现在它调用函数而不是访问它的属性。
  • 表达式“sNumber.charAt[i]”未定义。 (Javascript 不介意您尝试取消引用函数)。一元加号运算符试图将 undefined 转换为数字并生成 NaN 并将其推送到您的数组中。 (push(+sNumber.charAt[i]) ~~&gt; push(+undefined) ~~&gt; push(NaN))。您的示例实际上以 5 x NaN 的数组结束

标签: javascript arrays parsing nan


【解决方案1】:

你应该像@Nina所说的那样使用split函数,但是如果你对你的错误在哪里感兴趣,你可以试试这个:

替换

charAt[i]

charAt(i) // parentheses

charAt是一个函数,你需要使用括号()来调用它

【讨论】:

    【解决方案2】:

    删除 push 语句中 sNumber 之前的 +。也代替 console.log 使用 console.dir

        function convert(numbers){
          var arystrNumbers = numbers.split(" "), aryNumbers = [];
    
          for( var idx in arystrNumbers ) {
             aryNumbers.push(parseInt(arystrNumbers[idx]));    
          }
          return aryNumbers;  
        };
    
    
        console.log("Before: " + strNumbers);
        console.dir(convert("1 2 2 2 2"));
    

    试试上面的。

    【讨论】:

    • 他为什么要删除+?那里就需要它。
    • 出于什么目的?这不是必需的。它应该是: output.push(sNumber[i]);
    • 出于与您在答案中添加 parseInt() 相同的目的。 output.push(sNumber[i]) 将字符串推送到数组中。 + 将其转换为数字。
    【解决方案3】:

    为什么不使用String#split()

    function convert(numbers) {
        return numbers.trim().split(/\s+/).map(Number);
    }
    
    document.write('<pre>' + JSON.stringify(convert("   1 2 2 2 2  "), 0, 4) + '</pre>');

    【讨论】:

    • 这就是要走的路,除了你应该在拆分之前.trim()字符串。 +1
    【解决方案4】:

    为什么不喜欢这个

    function convert(numbers){
      return numbers.replace(/\s+/g,'').split('');
    }
    
    console.log(convert("1 2 2 2 2"));
    

    其实,如果总是只有1个空格字符,你可以这样做

    console.log("1 2 2 2 2".split(' '));
    

    【讨论】:

      【解决方案5】:

      希望这会有所帮助 https://jsfiddle.net/x0mubx4q/

      output.push(sNumber[i]);   
      

      问题在于 .chartAt() 函数。这将返回一个字符串。

      【讨论】:

      • 是的,您可以使用 + 号作为数字。它现在可以工作了。
      猜你喜欢
      • 2018-12-30
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 2018-02-22
      • 2012-07-22
      • 2020-01-09
      • 1970-01-01
      相关资源
      最近更新 更多