数据表 - 多列过滤和比较

问题描述

使用数据表插件。我的表数据是正确的。我想过滤该数据:

  • 显示第 4 列值等于“确定”的行(这是有效的)
  • Of 这些行仅显示第 7 列值与第 8 列值不同的行(这不起作用)

(过滤器代码

else if (input.value == "IncorrectQuantity") {
                table
                    .columns().search('')
                    .column(4).search('Ok',true,false)
                    .columns([7,8])
                    .data()
                    .filter(function (value,index) {
                        console.log(value);
                        return value[0] != value[1] ? true : false;
                    })
                    .draw();
            }

我从 console.log(value)(第 7 列 + 第 8 列数据)得到的输出是:

enter image description here

所以我不想显示带有(17-17 和 15-15)的行。我原以为 value[0] 是第一行,value[1] 是第二行, 但是不,如果我做 console.log(value[0]),我会得到 3 and null。所以我不知道如何实际比较第 7 列和第 8 列的值。

编辑

遵循@frenchy 的回答

                /*
                    table
                    .columns().search('')                                   //clear other searchs
                    .column(4).search('Ok',false)                    //search column 4 value = "Ok"
                    .flatten()                                              //reduces 2D array structures to 1D structure
                    .data()                                                 //provides access to Data
                    .filter(function (value,index) {                       //filter won't actually change which rows are displayed [https://datatables.net/reference/api/filter()]
                        console.log(value.quantity,value.quantityArrival); //value will be an object so i can access it's properties directly
                        return value.quantity != value.quantityArrival;     //value.quantity = Column 7    &&    value.quantity = Column 8
                    })
                    .draw();*/

                //SOLUTION - Custom Filter
                $.fn.dataTable.ext.search.push(
                    function (settings,data,dataIndex) {
                        console.log(data);          //Will print entire row
                        return data[7] != data[8];  //values for column 7 and 8
                    }
                );

                table
                    .columns().search('')                   //clear other searchs
                    .column(4).search('Ok',false)    //search column 4 value = "Ok"
                    .draw();

                $.fn.dataTable.ext.search.pop();            //apply custom filter:only display row if column7!=column8

解决方法

按照你说的,value 是一个数组,第一个值是 col7,第二个是 col8,所以,语法似乎是:

                .columns([7,8]).flatten()
                .data()
                .filter(function (value,index) {
                    console.log(value[0] != value[1],index);
                    return value[0] != value[1];
                })

使用自定义过滤器

else if (input.value == "IncorrectQuantity") {
     
    $.fn.dataTable.ext.search.push(
      function(settings,data,dataIndex) {
        return data[0] != data[1];
      }
    );
    
    table
       .columns().search('')
       .column(4).search('Ok',true,false)
       .columns([7,8]).flatten()
       .data()
       .draw();

  $.fn.dataTable.ext.search.pop();