我有一个包含以下数据的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();
}
我该如何解决这个问题?
答案 0 :(得分:0)
正如您所注意到的,您的代码会工作一点,但是仅当_currentSelectedRow
是第一次运行0
时。演示:http://jsfiddle.net/6hqn7xs5/1/。这是因为在“切片”调用中,您始终将“ end”参数指定为1。As per the documentation这意味着返回的数组将只包含索引之前的内容。如果为“ begin”参数指定大于0的任何数字,则给定切片的范围不能选择任何项目。您必须像往常一样将“ end”指定为比“ 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);
P.S。我建议您仔细阅读JavaScript arrays和JavaScript assignment operators的基础知识,以免将来再犯此类错误。