【问题标题】:How to go through a list and count numbers only?如何浏览列表并仅计算数字?
【发布时间】:2017-02-09 10:03:58
【问题描述】:

我怎样才能通过一个列表让计算机检查它是否是一个数字,如果它是一个数字,我想数并继续直到最后然后显示结果。

例如,如果我有一个数组:

 var myArray = [1,2,a,4];

我所做的是首先拆分我的数组:

var splitted = myArray.toString()split(",").join(" "); 

然后我使用 for 循环遍历每个拆分值并计算它是否是数字(或字符串),然后将结果显示在适当的框中:

 for(i=0;i<splitted.length; i+=1)
 {
 if(isNaN(splitted[i])===true)
 {
 document.getElementById("resultWordCount").value = splitted[i];
 }

else
{
document.getElementById("resultNumberCount").value = splitted[i];  

但是使用此代码,我不断获取列表中显示的最后一个数字和列表中显示的最后一个字符串,以作为结果显示在我的框中。我该怎么做才能解决这个问题?

【问题讨论】:

  • 您到底想展示什么?如果你想显示计数,你的计数器在哪里?
  • 你正在覆盖 document.getElementById("resultWordCount").value,你想显示所有数字然后你需要不同的结构
  • 什么是count37 的结果?
  • 我想显示列表/数组中数字和字符串的总数。例如,在这种情况下,我的总数为 3,因为此列表中有 3 个数字,而我的单词/字符串/字符总数将为 1,因为只有一个“a”。 document.getElementById("resultNumberCount").value: 应该显示数字统计结果的位置,document.getElementById("resultWordCount").value: 应该显示字数统计结果的位置。

标签: javascript list


【解决方案1】:

您可以与isNaN 核对并计数。

var myArray = [1, 2, 'a', 4],
    result = myArray.reduce(function (s, a) {
        return s + !isNaN(a);
    }, 0);

console.log(result);

【讨论】:

    【解决方案2】:
    var myArray = [1,2,a,4];
    var result = 0;
    for(var i=0; i < myArray.length; i++) {
      result += !isNaN(+myArray[i]) ? myArray[i] : 0;
    }
    

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
    • 是的,我同意这确实会有所帮助,不过谢谢
    【解决方案3】:
    var count = 0;
    
    myArray.forEach(function(item){
     if(!isNaN(Number(item))){
       count ++;
      }
    });
    
    console.log(count);
    

    【讨论】:

      【解决方案4】:

      首先,如果您已经有一个数组,为什么要将它转换为一个字符串,然后将其拆分,然后再将其连接到另一个字符串?您不是循环遍历数组项,而是遍历字符串字符。当您的输入发生变化时,这将导致各种问题。

      然后,isNaN(splitted[i])===true 检查数组的当前项是否不是数字,因此您应该忽略它们而不是使用它们。

      最后,您无需在任何地方进行求和,只需将每个项目依次分配给“resultNumberCount”标签的值。这就是为什么,在过程结束时,您只会看到数组中的最后一个值(或者实际上是字符串)

      【讨论】:

        【解决方案5】:

        你可以使用map function来统计integers的数量

        var myArray = [1, 2, 'a', 4];
        var numbers = 0;
        myArray.map(function (a) {
        if (Number(a))
           numbers++;
        });
        console.log(numbers);
        

        【讨论】:

          【解决方案6】:

          你可以这样做:

          var a = [1, 2, 'c', 4];
          console.log(a.filter(function(value){
              return !isNaN(value);
          }).length)
          

          【讨论】:

            【解决方案7】:

            您不必拆分数组
            并且只是连接值

             var myArray = [1,2,"a",4];
             var countNum = 0;
             var countNaN = 0;
             
             for(i=0;i<myArray.length; i+=1){
              if(isNaN(myArray[i])){
                document.getElementById("resultWordCount").value += myArray[i];
                countNaN++;
                
              }else{
                document.getElementById("resultNumberCount").value += myArray[i];  
                countNum++;
                
              }
            }
            console.log(countNaN);
            console.log(countNum);
            <input id="resultNumberCount" type="text" disabled >
            <input id="resultWordCount" type="text" disabled  >

            编辑:

            如果你只想要总数:

            var myArray = [1,2,"a",4];
             var countNum = 0;
             var countNaN = 0;
             
             for(i=0;i<myArray.length; i+=1){
              if(isNaN(myArray[i])){
                
                countNaN++;
                
              }else{
                
                countNum++;
                
              }
            }
            document.getElementById("resultNumberCount").value = countNum;  
            document.getElementById("resultWordCount").value = countNaN;
            console.log(countNaN);
            console.log(countNum);
            <input id="resultNumberCount" type="text" >
            <input id="resultWordCount" type="text" >

            【讨论】:

            • 您的代码可以工作,但它没有显示字符串或数字的数量,而是显示了所有字符串和所有数字。你能找到一种方法让它显示计数而不是字面上的数字或字符串
            • 就在 for 完成后执行此操作 document.getElementById("resultWordCount").value = countNaN;document.getElementById("resultNumberCount").value = countNum
            • 我什至尝试进行更改,但使用新代码时,它给了我现在奇怪的数字列表“01284783”或“0000111”等
            • 您在答案中看到我的编辑了吗?你只显示总数,这是你需要的吗?
            猜你喜欢
            • 2015-03-19
            • 2020-06-21
            • 1970-01-01
            • 1970-01-01
            • 2022-11-17
            • 2013-12-27
            • 2022-06-19
            • 1970-01-01
            • 2015-01-23
            相关资源
            最近更新 更多