首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript不能向带循环的函数中添加参数

Javascript不能向带循环的函数中添加参数
EN

Stack Overflow用户
提问于 2021-01-02 02:57:46
回答 1查看 90关注 0票数 0

当应用于html表时,我有一个代码应该执行heatmap:

html表代码:

代码语言:javascript
复制
<table class='table' id='js-datatable' cellspacing="0.9" cellpadding="8" border="1">
    <tr>
        <th align=center style="white-space: nowrap;" bgcolor=grey>product</th>
        <th align=center style="white-space: nowrap;" bgcolor=grey>Jan</th>
        <th align=center style="white-space: nowrap;" bgcolor=grey>Feb</th>
        <th align=center style="white-space: nowrap;" bgcolor=grey>Mar</th>
        <th align=center style="white-space: nowrap;" bgcolor=grey>Apr</th>
        <th align=center style="white-space: nowrap;" bgcolor=grey>May</th>
    </tr>
    <tr class='heatmap-stable'>
        <td align=center>K22</td>
        <td align=center>655$</td>
        <td align=center>365$</td>
        <td align=center>265$</td>
        <td align=center>125$</td>
        <td align=center>36$</td>
    </tr>
    <tr class='heatmap-stable'>
        <td align=center>K52</td>
        <td align=center>90</td>
        <td align=center>50</td>
        <td align=center>120</td>
        <td align=center>80</td>
        <td align=center>190</td>
    </tr>
    <tr class='heatmap-stable'>
        <td align=center>J42</td>
        <td align=center>1267</td>
        <td align=center>1567</td>
        <td align=center>347</td>
        <td align=center>697</td>
        <td align=center>70</td>
    </tr>
    <script src='https://cdn.bootcdn.net/ajax/libs/jquery/2.1.3/jquery.js'></script>
    <script type='text/javascript' src='script.js'></script>
</table>

javа脚本文件代码:

代码语言:javascript
复制
function clean_formatted_data(str) {
    return parseFloat (str.replace (/([%,$,\,])+/g, ''));
}

function col_to_array(tbl_col, target) {
    // Returns column `n` (zero indexed) in table id `target` as an array

    var colArray = $ ('#' + target + ' td:nth-child(' + tbl_col + ')').map (function () {
        return clean_formatted_data ($ (this).text ());
    }).get ();

    return colArray;
}

//------ new schtuff ------------------------//

function get_pos_of_max(col_data) {
    return $.inArray (Math.max.apply (Math, col_data), col_data)
}

function generate_opacities(col_data, max) {
    var opacity_array = [];
    var increment = max / (col_data.length);

    for (i = col_data.length; i >= 1; i--) {
        opacity_array.push (i * increment / 100);
    }

    return opacity_array;
}


function process_col_best_performing(tbl_col, target) {
    var col_data = col_to_array (tbl_col, target);
    var opacity_array = generate_opacities (col_data, 50);
    var row_count = col_data.length;

    for (var i = 1; i <= row_count; i++) {
        $ ('#' + target + ' tr:nth-child(' + (get_pos_of_max (col_data) + 1) + ') td:nth-child(' + tbl_col + ')').css ('background', 'rgba(0,0,255,' + opacity_array[0] + ')');
        col_data[get_pos_of_max (col_data)] = null;
        for (const spliceElement of opacity_array.splice (0, 1)) {

        }

    }
}

假设我有5列,所以我的javascript函数可以这样应用:

代码语言:javascript
复制
process_col_best_performing (tbl_col:1, target:'js-datatable');
process_col_best_performing (tbl_col:2, target:'js-datatable');
process_col_best_performing (tbl_col:3, target:'js-datatable');

但是因为这只是一个例子,实际html表可以有任意数量的列,我想用for循环来实现,所以我尝试了下面的代码,但是它不起作用。

代码语言:javascript
复制
var cols_qty = document.getElementById ('js-datatable').rows[0].cells.length
var i;
for(i = 1; i < 4; i++) {
    console.log(i)
    process_col_best_performing(tbl_col=i,'js-datatable');
}

*我对javascript完全陌生,所以如果你知道答案,请用尽可能简单的方式解释。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-04 02:38:18

不确定这是否有帮助,但是尝试下面的代码,首先不要声明为全局变量i;在for循环之前,我不确定您是否在代码中执行相同的操作,但是在调用process_col_best_performing的函数中更改了相同的代码并影响了循环。检查下面的代码,看看这是否有意义。

代码语言:javascript
复制
var cols_qty = document.getElementById ('js-datatable').rows[0].cells.length
for(var i = 1; i < 4; i++) {
    console.log(i)
    process_col_best_performing(i,'js-datatable');
}

function clean_formatted_data(str) {
    return parseFloat (str.replace (/([%,$,\,])+/g, ''));
}

function col_to_array(tbl_col, target) {
    // Returns column `n` (zero indexed) in table id `target` as an array

    var colArray = $ ('#' + target + ' td:nth-child(' + tbl_col + ')').map (function () {
        return clean_formatted_data ($ (this).text ());
    }).get ();

    return colArray;
}

//------ new schtuff ------------------------//

function get_pos_of_max(col_data) {
    return $.inArray (Math.max.apply (Math, col_data), col_data)
}

function generate_opacities(col_data, max) {
    var opacity_array = [];
    var increment = max / (col_data.length);

    for (var i = col_data.length; i >= 1; i--) {
        opacity_array.push (i * increment / 100);
    }

    return opacity_array;
}


function process_col_best_performing(tbl_col, target) {
    var col_data = col_to_array (tbl_col, target);
    var opacity_array = generate_opacities (col_data, 50);
    var row_count = col_data.length;

    for (var i = 1; i <= row_count; i++) {
        $ ('#' + target + ' tr:nth-child(' + (get_pos_of_max (col_data) + 1) + ') td:nth-child(' + tbl_col + ')').css ('background', 'rgba(0,0,255,' + opacity_array[0] + ')');
        col_data[get_pos_of_max (col_data)] = null;
        for (const spliceElement of opacity_array.splice (0, 1)) {

        }

    }
}
代码语言:javascript
复制
 <script src='https://cdn.bootcdn.net/ajax/libs/jquery/2.1.3/jquery.js'></script>
<table class='table' id='js-datatable' cellspacing="0.9" cellpadding="8" border="1">
    <tr>
        <th align=center style="white-space: nowrap;" bgcolor=grey>product</th>
        <th align=center style="white-space: nowrap;" bgcolor=grey>Jan</th>
        <th align=center style="white-space: nowrap;" bgcolor=grey>Feb</th>
        <th align=center style="white-space: nowrap;" bgcolor=grey>Mar</th>
        <th align=center style="white-space: nowrap;" bgcolor=grey>Apr</th>
        <th align=center style="white-space: nowrap;" bgcolor=grey>May</th>
    </tr>
    <tr class='heatmap-stable'>
        <td align=center>K22</td>
        <td align=center>655$</td>
        <td align=center>365$</td>
        <td align=center>265$</td>
        <td align=center>125$</td>
        <td align=center>36$</td>
    </tr>
    <tr class='heatmap-stable'>
        <td align=center>K52</td>
        <td align=center>90</td>
        <td align=center>50</td>
        <td align=center>120</td>
        <td align=center>80</td>
        <td align=center>190</td>
    </tr>
    <tr class='heatmap-stable'>
        <td align=center>J42</td>
        <td align=center>1267</td>
        <td align=center>1567</td>
        <td align=center>347</td>
        <td align=center>697</td>
        <td align=center>70</td>
    </tr>

</table>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65535668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档