从表中删除行(删除的行数多于选定的行数)

时间:2016-06-02 23:19:06

标签: javascript angularjs filter underscore.js ag-grid

我有一张包含以下细节的表格。

Row_no | Contact Person | Address |
 26    |  Andarw        | DEL     |
 25    |  Celret        | DRT     |
 24    |  Driok         | ddd     |
 23    |  Andarw        | DEL     |
 22    |  Celret        | DRT     |
 2     |  Driok         | ddd     |
 3     |  Andarw        | DEL     |
 4     |  Celret        | DRT     |
 5     |  Driok         | ddd     |

Row_no是唯一的。我保持它是唯一的,以便在删除行时,我会知道我想删除哪些行。但问题如下。

如果我删除Row_no 25,24,23,22的行 - 它正在删除这些行,但它也删除了2,3,4,5。它表现得很奇怪。

以下是我使用的代码......

function remove(names) {
    currentrows = currentrows.filter(function (obj) {
        return names.indexOf(obj.row_no) == -1;
    });
}



 $scope.deleteuser = function () {

        //selectedRowsString is a string. its value is '25,24,23,22'
        remove(selectedRowsString);
        $scope.gridOptions.rowData = currentrows; //updates new rowdata to grid table
        $scope.gridOptions.api.setRowData($scope.gridOptions.rowData);//updates new rowdata to grid table
        selectedRows = "";//this is to reset for next deletion
        selectedRowsString = ""; //this is to reset for next deletion

};

我相信函数remove(names)中的indexOf导致了问题。在删除row_no 22,23,24,25时,它也删除了2,3,4,5,因为22,23,24,25在索引中有这些值。

我无法确切地知道如何纠正此错误。有人可以请帮助。

1 个答案:

答案 0 :(得分:1)

我在这里为你准备了一个小提琴:https://jsfiddle.net/czeee3dd/

首先,您对自己的问题是正确的。当您在字符串上执行indexOf时,将会拾取字符串中row_no的任何匹配项。

一个简单的解决方法是首先将名称字符串转换为字符串数组。

names = names.split(',');

然后你可以进行当前的比较,但是你必须确保在比较之前将每个row_no值转换为字符串。

return names.indexOf(item.row_no.toString()) == -1;

这里有完整的小提琴代码:

var data = [
  {row_no: 26, name: 'Andarw'},
  {row_no: 21, name: 'another'},
  {row_no: 2, name: 'thid'},
  {row_no: 4, name: 'hagrid'}
];

function doFilter(names){
  names = names.split(',');
  var filtered = data.filter(function(item){
      return names.indexOf(item.row_no.toString()) == -1;
  });
  return filtered;
}

var output = doFilter('26,21');
console.log(output);