从 table 中删除行(删除的行数多于选定的行数)
Delete rows from table (deleting more rows than those which are selected)
我有一份 table,其中包含以下详细信息。
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 在索引中具有这些值。
我不知道如何纠正这个错误。有人可以帮忙吗?
我在这里为你整理了一个fiddle:https://jsfiddle.net/czeee3dd/
首先,你的问题是正确的。当您在字符串上执行 indexOf
时,字符串中出现的任何 row_no
都将被拾取。
一个简单的解决方法是首先将您的名称字符串转换为字符串数组。
names = names.split(',');
然后您可以进行当前的比较,但是您必须确保在比较之前将每个 row_no 值转换为字符串。
return names.indexOf(item.row_no.toString()) == -1;
完整的 fiddle 代码在这里:
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);
我有一份 table,其中包含以下详细信息。
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 在索引中具有这些值。
我不知道如何纠正这个错误。有人可以帮忙吗?
我在这里为你整理了一个fiddle:https://jsfiddle.net/czeee3dd/
首先,你的问题是正确的。当您在字符串上执行 indexOf
时,字符串中出现的任何 row_no
都将被拾取。
一个简单的解决方法是首先将您的名称字符串转换为字符串数组。
names = names.split(',');
然后您可以进行当前的比较,但是您必须确保在比较之前将每个 row_no 值转换为字符串。
return names.indexOf(item.row_no.toString()) == -1;
完整的 fiddle 代码在这里:
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);