使用Javascript仅将选定的数组数据发送到另一个数组

时间:2018-11-14 07:15:30

标签: javascript jquery arrays json ajax

我有一个包含以下数据的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 :(得分: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 arraysJavaScript assignment operators的基础知识,以免将来再犯此类错误。