javascript - Jquery Datatables - 使用复选框对 ID 组的最后一个元素进行自定义过滤

标签 javascript jquery datatables

我的 jquery 数据表中的数据如下所示

Id      Revision
-----------------
123400 | 01
123401 | 04
123402 | 09
456789 | 00
456790 | 05
-----------------

现在,用户需要一个复选框来过滤数据表,以仅显示一组 Id(按前 4 个字符分组)表中的最后一个条目。 这应该是上表过滤后的结果

Id      Revision
-----------------
123402 | 09
456790 | 05
-----------------

ID 按“1234”和“4567”分组,并显示最后的条目。

因此,我获取从服务器获得的所有数据,并构建一个新数组,其中包含上面第二个表的数据:

var lastIndex;
    var lastRev;
    var newData = [];
    var n = 0;
    for (var k = 0; k < data.length; k++)
    {
        // if new ID is unknown and new Rev is unknown, fill newData and count up
        if (data[k][0].indexOf(lastIndex) < 0 && data[k][1].indexOf(lastRev) < 0) {
            newData[n] = data[k];
            n++;
        }
        else // else overwrite last element
        {
            newData[n - 1] = data[k];
        }

        lastIndex = data[k][0].substring(0, 4);
        lastRev = data[k][1];
    }

现在出现了无法按预期工作的部分

$.fn.dataTableExt.afnFiltering.push(function (oSettings, aData, iDataIndex) {

        var checked = $('#myCheckbox').is(':checked');

        if (checked)
    {

            for (var i = 0; i < newData.length; i++)
            {                
                if ((aData[0] == newData[i][0]) && (aData[1] == newData[i][1]))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }

        }
        else
        {
            return true;
        }
    }

var oTable = $('#myTable').dataTable();
    $('#myCheckbox').on("click", function (e) {
        oTable.fnDraw();
    });

这仅返回第一个元素,即 ID“123402”、修订版“09”。 但我希望它能够显示如上面第二个表所示。

我做错了什么,或者我在这里错过了什么? 任何帮助将不胜感激

预先感谢您, 查理·H.

最佳答案

问题:问题出在这部分逻辑上。

      for (var i = 0; i < newData.length; i++)
        {                
            if ((aData[0] == newData[i][0]) && (aData[1] == newData[i][1]))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

它有一个永远不会超过第一次迭代的返回语句。这就是您只获得一行的原因。

<小时/>

解决方案:您必须删除 for 循环中的 else 部分。就像下面这样

      for (var i = 0; i < newData.length; i++)
        {                
            if ((aData[0] == newData[i][0]) && (aData[1] == newData[i][1]))
            {
                return true;  // if record found return true immediately;
            } 
            // if not found wait for next loop, we need to make sure we 
            //complete the loop before deciding the data not found.              
        }
        return false; // Now since we are out of the loop its obvious that 
                      //we didnt find the record.

希望这有帮助..

关于javascript - Jquery Datatables - 使用复选框对 ID 组的最后一个元素进行自定义过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41062446/

相关文章:

javascript - 如何仅在需要时加载js文件

javascript - 关于 : caching a jquery object when passing to a function? 的问题

javascript - 为什么我的 HTML 表在使用 ajax 刷新时会丢失引导数据表属性?

javascript - 无法验证 json_decode 关联数组元素

jquery - 查看客户端浏览器是否支持 PUT/DELETE 方法的编程方式

javascript - 将动态加载的复选框绑定(bind)到 Angular.js 模型

javascript - 如何选择表格元素并运行 JavaScript

javascript - 如何让 PhpStorm 支持这种语法

javascript - Highcharts折线图,在折线系列末尾显示系列名称

javascript - JSON 格式的 Ext.data.store POST 数据问题