2016-06-02 1 views
0

J'ai une table avec les détails suivants.Supprimer les lignes de la table (en supprimant plus de lignes que celles qui sont sélectionnées)

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  | 

Le numéro de ligne est unique. Je l'ai gardé comme unique de sorte que tout en supprimant des lignes, je viendrais à savoir quelles lignes je veux supprimer. Mais le problème est le suivant.

Si je supprime des lignes avec Row_no 25,24,23,22 - il supprime ces lignes mais il supprime également 2,3,4,5. Il se comporte bizarrement.

Voici le code que je l'utilise ...

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 

}; 

je crois que le indexOf en fonction remove (noms) est à l'origine du problème. Tout en supprimant row_no 22,23,24,25-- il supprime également 2,3,4,5 parce que 22,23,24,25 a ces valeurs dans l'index.

Je ne comprends pas exactement comment corriger cette erreur. Puis-je avoir une aide s'il vous plait.

Répondre

1

J'ai mis un violon ensemble pour vous ici: https://jsfiddle.net/czeee3dd/

Tout d'abord, vous avez raison de votre problème. Comme vous faites un indexOf sur une chaîne, n'importe quelle occurrence du row_no dans la chaîne va être ramassée. Une solution simple consiste à convertir votre chaîne de noms en un tableau de chaînes.

names = names.split(','); 

Ensuite, vous pouvez faire la comparaison que vous avez actuellement, mais vous devez vous assurer que vous convertir chaque valeur de row_no à une chaîne avant de comparer.

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

code violon complet ici:

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