Как вы заметили, ваш код будет работать немного, но только когда _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 , поэтомуВы не будете делать такие ошибки в будущем.