2016-06-02 4 views
0

다음과 같은 세부 사항이있는 테이블이 있습니다.테이블에서 행 삭제 (선택된 테이블보다 많은 행 삭제)

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 

}; 

내가 문제를 일으키는 기능 제거 (이름)에서 같이 IndexOf를 생각 ... 내가 사용하는 코드입니다. row_no 22,23,24,25를 삭제하는 동안 22,23,24,25는 인덱스에 해당 값이 있으므로 2,3,4,5도 삭제합니다.

정확하게이 오류를 해결하는 방법이 표시되지 않습니다. 누군가 제발 도와 줄 수 있어요.

답변

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);