DataTables - 过滤和比较多列

DataTables - Filtering and Comparing on Multiple Columns

使用 DataTables 插件。我的 Table 数据是正确的。我想这样过滤数据:

(过滤代码)

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)(column7 + column8 数据)得到的输出是:

所以我不想显示带有(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', true, 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', true, false)    //search column 4 value = "Ok"
                    .draw();

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

按照你说的,值是一个数组,第一个值是 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();