Отправить только выбранные данные массива в другой массив, используя JavaScript - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть массив JSON со следующими данными

source=[{"OperationName":"All","PrivilegeName":"Roles CRUD"},
        {"OperationName":"Read","PrivilegeName":"Roles Read Delete"},
        {"OperationName":"Delete","PrivilegeName":"Roles Read Delete"},
        {"OperationName":"Read","PrivilegeName":"Roles Update"},
        {"OperationName":"Update","PrivilegeName":"Roles Update"}]

У меня есть целевой массив, т. Е. destination =[];

Я создал функцию bindRowEvent (), которая возвращает выбранную строку изтаблицу и сохраняет ее в переменной _currentSelectedRow.

Я пытаюсь выбрать конкретную строку и отправить только выбранное значение в целевой массив.Я могу сделать это для первого значения, но при втором вызове функции оно просто перезаписывает первое значение в месте назначения

function AssignOne(_currentSelectedRow) {
         debugger;
         //destination.push(_currentSelectedRow);

         if (destination.length == 0) {
              destination = source.slice(_currentSelectedRow, 1);
         }
         else {                                 
              destination = source.slice(_currentSelectedRow, destination.length+1);

         }

         source.splice(_currentSelectedRow, 1);
         console.log(destination);

         displaySource();
         displayDestination2();
         bindRowEvent();
 }

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 14 ноября 2018

Как вы заметили, ваш код будет работать немного, но только когда _currentSelectedRow равен 0 при первом запуске.Демо: http://jsfiddle.net/6hqn7xs5/1/. Это потому, что в вызове "slice" вы всегда указываете параметр "end" как 1. Согласно документации это означает, что возвращаемый массив будет содержать только вещи before index 1. В свою очередь это означает, что если вы укажете какое-либо число, большее 0, для параметра «begin», то диапазон, заданный для среза, не сможет выбрать ни одного элемента.Вам нужно было бы указать «конец» в двух словах, поскольку он всегда больше единицы, чем «начало».

Во-вторых, причина, по которой он каждый раз перезаписывает все назначение, заключается в том, что оператор = переназначает значениепеременная destination для нового заданного значения.Это ничего не добавляет к этому.Это очень базовая концепция JavaScript (и большинства языков программирования), которую вы должны убедиться, что вы понимаете.

Однако, поскольку вы хотите выбрать только один элемент, все вышеизложенное является излишним.Тривиально выбрать один элемент по его индексу и затем добавить его в массив (хорошо документировано), используя push () :

var source = [{
    "OperationName": "All",
    "PrivilegeName": "Roles CRUD"
  },
  {
    "OperationName": "Read",
    "PrivilegeName": "Roles Read Delete"
  },
  {
    "OperationName": "Delete",
    "PrivilegeName": "Roles Read Delete"
  },
  {
    "OperationName": "Read",
    "PrivilegeName": "Roles Update"
  },
  {
    "OperationName": "Update",
    "PrivilegeName": "Roles Update"
  }
];
var destination = [];

function AssignOne(_currentSelectedRow) {
  destination.push(source[_currentSelectedRow]);

  console.log(destination);

  /*displaySource();
  displayDestination2();
  bindRowEvent();*/
}

AssignOne(0);
AssignOne(2);

PS Я бы настоятельно рекомендовал вам ознакомиться с основами массивов JavaScript и операторов назначения JavaScript , поэтомуВы не будете делать такие ошибки в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...