Удалить строки из таблицы (удаляет больше строк, чем выбранных)

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 в функции remove (names) вызывает проблему. При удалении row_no 22,23,24, 25-- он также удаляет 2,3,4,5, потому что 22,23,24,25 имеет эти значения в индексе.

Я не получаю точно, как исправить эту ошибку. Может кому-то помочь.

Теги:
filter
ag-grid
underscore.js

1 ответ

1
Лучший ответ

Я собрал для вас скрипку: https://jsfiddle.net/czeee3dd/

Во-первых, вы правы в своей проблеме. Поскольку вы делаете indexOf в строке, любое вхождение row_no в строке будет 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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню