Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript在表中添加和平均值时如何处理NAN_Javascript_Jquery - Fatal编程技术网

Javascript在表中添加和平均值时如何处理NAN

Javascript在表中添加和平均值时如何处理NAN,javascript,jquery,Javascript,Jquery,我正在尝试编写一个高效的javascript函数,该函数将循环遍历一个表,获取所有数字,并用字符串忽略所有tds。将添加列并求平均值,并为每个列追加行 我有这项工作的基本功能。然而,如果该表不包含字符串,则结果与预期一致。当表中确实包含字符串时,该列的总数和平均值相差甚远,我不确定答案是如何计算的。我希望有人能帮我找到一种方法,可以忽略所有这些值,并创建一种更有效的方法来编写这个函数 最后,我希望能够通过简单地传入表来调用此函数,例如,buildRows(table) 以下是我目前得到的信息:

我正在尝试编写一个高效的javascript函数,该函数将循环遍历一个表,获取所有数字,并用字符串忽略所有tds。将添加列并求平均值,并为每个列追加行

我有这项工作的基本功能。然而,如果该表不包含字符串,则结果与预期一致。当表中确实包含字符串时,该列的总数和平均值相差甚远,我不确定答案是如何计算的。我希望有人能帮我找到一种方法,可以忽略所有这些值,并创建一种更有效的方法来编写这个函数

最后,我希望能够通过简单地传入表来调用此函数,例如,
buildRows(table)

以下是我目前得到的信息:

//用于生成总计行和平均行的函数
函数buildRow($element){
var结果=[];
$($element).find('tbody tr').each(function(){
//忽略为标签保留的第一列
$('td:not(:first'),this).each(函数(索引,val){
如果(!result[index])result[index]=0;
结果[index]+=parseInt($(val.text());
});
});
//获取行的总金额
var rowCount=$($元素).find('tbody tr').length;
//添加平均行
$($元素)。追加(“”);
$($element).find('tr').last().append('+'平均'+'');
$(结果)。每个(函数(){
$($element).find('tr').last().append(“”+this/rowCount+“”);
});
//添加总行数
$($元素)。追加(“”);
$($element).find('tr').last().append('+'总计'+'');
$(结果)。每个(函数(){
$($element).find('tr').last().append(“”+this+“”);
});        
}
//理想函数调用
变量tableOne=$('.tableOne');
buildRow(表一);
变量tableTwo=$('.tableTwo');
buildRow(表二)
表格{
边框:1px实心#333;
填充:10px;
右边距:5px;
}
表tr:第n个子项(奇数){
背景色:#E0;
}
表td{
填充:10px;
边框:1px实心#555;
文本对齐:居中;
}

第一排
45
23.356
88
第二排
111440.568
115555
4.21598
第三排
27
42
144487.11
第四排
23.356
125%   
778978523.36
第一排
45
23.356
你好
第二排
111440.568
115555
4.21598
第三排
狗
真的
144487.11
第四排
23.356
125%   
778978523.36

不能只对每个值执行
parseInt
,它有时会将字符串转换为奇怪的数字。你必须先检查它是否是一个无效的数字,然后再求和。我想到一个正则表达式或类似的东西,未经测试

var v = $(val).text();
if(v.match(/^[\s0-9\.]+$/)){}

不能只对每个值执行
parseInt
,它有时会将字符串转换为奇怪的数字。你必须先检查它是否是一个无效的数字,然后再求和。我想到一个正则表达式或类似的东西,未经测试

var v = $(val).text();
if(v.match(/^[\s0-9\.]+$/)){}

既然您使用jQuery,为什么不直接使用jQuery内置的is numeric条件检查函数
$.isNumeric
,它将解析出几乎所有您不需要的数据

// true (numeric)
$.isNumeric( "-10" )
$.isNumeric( "0" )
$.isNumeric( 0xFF )
$.isNumeric( "0xFF" )
$.isNumeric( "8e5" )
$.isNumeric( "3.1415" )
$.isNumeric( +10 )
$.isNumeric( 0144 )

// false (non-numeric)
$.isNumeric( "-0x42" )
$.isNumeric( "7.2acdgs" )
$.isNumeric( "" )
$.isNumeric( {} )
$.isNumeric( NaN )
$.isNumeric( null )
$.isNumeric( true )
$.isNumeric( Infinity )
$.isNumeric( undefined )
资料来源:


示例:

既然您使用jQuery,为什么不使用jQuery内置的is numeric条件检查函数
$。isNumeric
将解析出几乎所有您不需要的数据

// true (numeric)
$.isNumeric( "-10" )
$.isNumeric( "0" )
$.isNumeric( 0xFF )
$.isNumeric( "0xFF" )
$.isNumeric( "8e5" )
$.isNumeric( "3.1415" )
$.isNumeric( +10 )
$.isNumeric( 0144 )

// false (non-numeric)
$.isNumeric( "-0x42" )
$.isNumeric( "7.2acdgs" )
$.isNumeric( "" )
$.isNumeric( {} )
$.isNumeric( NaN )
$.isNumeric( null )
$.isNumeric( true )
$.isNumeric( Infinity )
$.isNumeric( undefined )
资料来源:


示例:

您需要使用
var reg=/^\d+$/;检查td值是否为整数

您需要使用
var reg=/^\d+$/;检查td值是否为整数

如果您想要更准确的信息,可以忽略
Nan
并使用
Number
而不是
parseInt

 $('td:not(:first)', this).each(function(index, val) {
        if (!result[index]) result[index] = 0;
        var num = Number($(val).text());
        num = isNaN(num) ? 0 : num;
        result[index] += num;
      });

如果您想要更准确的信息,可以忽略
Nan
s并使用
Number
而不是
parseInt

 $('td:not(:first)', this).each(function(index, val) {
        if (!result[index]) result[index] = 0;
        var num = Number($(val).text());
        num = isNaN(num) ? 0 : num;
        result[index] += num;
      });

要记住两件事:

  • parseFloat
    将捕获浮点和整数
  • 在处理数字时,您可以使用
    |0
    来破解忽略错误值,并将其替换为
    0
  • 除此之外,我对您的代码做了一些修改,将必要的元素放入变量中:

    //用于生成总计行和平均行的函数
    函数buildRow($table){
    var结果=[],
    $tbody=$table.find('tbody'),
    $rows=$tbody.find('tr'),
    row_count=$rows.length;
    $rows.each(函数(){
    //忽略为标签保留的第一列
    var$cells=$('td:not(:first'),这是);
    $cells.每个(函数(索引,单元格){
    如果(!结果[索引])
    结果[指标]=0;
    结果[索引]+=parseFloat($(单元格).text()| | 0);
    });
    });
    //添加平均行
    变量$avg_row=$('');
    $avg_row.append('Averages');
    $.each(结果,函数(){
    $avg_row.append(“”+(此/行计数)+“”);
    });
    $tbody.append($avg_row);
    //添加总行数
    变量$total_row=$('');
    $total_row.append('Totals');
    $.each(结果,函数(){
    $total_row.append(“”+此+“”);
    });
    $tbody.append($total_row);
    }
    //理想函数调用
    变量$tableOne=$('.tableOne');
    buildRow(表一);
    变量$tableTwo=$('.tableTwo');
    buildRow(表二)
    
    表格{
    边框:1px实心#333;
    填充:10px;
    右边距:5px;
    }
    表tr:第n个子项(奇数){
    背景色:#E0;
    }
    表td{
    填充:10px;
    边框:1px实心#555;
    文本对齐:居中;
    }
    
    第一排
    45
    23.356
    88
    第二排
    111440.568
    115555
    4.21598
    第三排
    27
    42
    144487.11
    第四排
    23.356
    125%
    778978523.36
    第一排
    45
    23.356
    你好
    第二排
    111440.568
    115555
    4.21598
    第三排
    狗
    真的
    144487.11
    第四排
    23.356