根据另一列中的条件对一列求和

Sum a column based on a condition in another column

有什么方法可以从页脚回调中排除行 example :

我在所有记录的页脚中有 column 4(Salary) 的总和。 现在我想排除在 column 3(Office) 中具有名称的行,例如 - LondonNew York。 所以现在需要对除包含这两个城市的行之外的所有行求和。

$(document).ready(function() {
    $('#example').DataTable( {
        "footerCallback": function ( row, data, start, end, display ) {
            var api = this.api();
 
            // Remove the formatting to get integer data for summation
            var intVal = function ( i ) {
                return typeof i === 'string' ?
                    i.replace(/[$,]/g, '')*1 :
                    typeof i === 'number' ?
                        i : 0;
            };
 
            // Total over all pages
            total = api
                .column( 4 )
                .data()
                .reduce( function (a, b) {
                    return intVal(a) + intVal(b);
                }, 0 );
 
            // Total over this page
            pageTotal = api
                .column( 4, { page: 'current'} )
                .data()
                .reduce( function (a, b) {
                    return intVal(a) + intVal(b);
                }, 0 );
 
            // Update footer
            $( api.column( 4 ).footer() ).html(
                '$'+pageTotal +' ( $'+ total +' total)'
            );
        }
    } );
} );

是否需要在具有该名称的行中添加 类 或?最好的方法是什么?

工作解决方案:https://jsfiddle.net/cmjp4b3a/

    $(document).ready(function() {
    $('#example').DataTable( {
        "footerCallback": function ( row, data, start, end, display ) {
            var api = this.api();
 
            // Remove the formatting to get integer data for summation
            var intVal = function ( i ) {
                return typeof i === 'string' ?
                    i.replace(/[$,]/g, '')*1 :
                    typeof i === 'number' ?
                        i : 0;
            };
 
            // Total over all pages
total = api
    .column(4)
    .data()
    .reduce(function (a, b) {
          var cur_index = api.column(4).data().indexOf(b);
          if (api.column(3).data()[cur_index] != "London" && api.column(3).data()[cur_index] != "New York") {
          return intVal(a) + intVal(b);
        }
        else { return intVal(a); }
    }, 0)
            // Total over this page
            pageTotal = api
                .column( 4, { page: 'current'} )
                .data()
                .reduce(function (a, b) {
                      var cur_index = api.column(4).data().indexOf(b);
                      if (api.column(3).data()[cur_index] != "London" && api.column(3).data()[cur_index] != "New York") {
                      return intVal(a) + intVal(b);
                    }
                    else { return intVal(a); }
                }, 0)
 
            // Update footer
            $( api.column( 4 ).footer() ).html(
                '$'+pageTotal +' ( $'+ total +' total)'
            );
        }
    } );
} );