Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript通过引用或值分配数组元素_Javascript_Jquery_Angularjs_Arrays - Fatal编程技术网

Javascript通过引用或值分配数组元素

Javascript通过引用或值分配数组元素,javascript,jquery,angularjs,arrays,Javascript,Jquery,Angularjs,Arrays,有没有办法通过引用而不是通过值来明确地设置数组元素 例如,此方法按值设置数组元素: 方法1 var pushes = [2,1] for(var i=0; i<pushes.length; i++) { vm.allEmployeesOnJob[i] = vm.allEmployees[pushes[i]]; } 我的用例: 我使用的是角度引导duallistbox,为了正确初始化两个ListBox,“ng model”数组必须通过引用引用“ng

有没有办法通过引用而不是通过值来明确地设置数组元素

例如,此方法按值设置数组元素:

方法1

var pushes = [2,1]
for(var i=0; i<pushes.length; i++)
{
   vm.allEmployeesOnJob[i] = vm.allEmployees[pushes[i]];                  
}
我的用例:

我使用的是角度引导duallistbox,为了正确初始化两个ListBox,“ng model”数组必须通过引用引用“ng options”数组元素。这是由于我读过的解释中的“select”DOM元素的行为造成的。我之所以知道第二个是通过引用设置的,是因为listbox使用该方法正确更新,而没有使用第一个方法正确更新

有什么区别吗

有没有办法通过引用以编程方式将数组元素显式地设置为另一个数组的元素

编辑:

allEmployees是雇员对象的数组

vm.allEmployees的内容:

[      {  
      "employeeId":1,
      "firstName":"Bill",
      "lastName":"Test",
      "email":null,
      "phoneNumber":null,
      "street":"1234 Sesame",
      "city":"New York City",
      "state":"New York",
      "zip":"34555",
      "activeFlag":true,
      "homeLocationId":2,
      "homeLocation":{  
         "locationId":2,
         "customerId":2,
      },
      "displayName":"Bill Test - Newaygo"    },    
 {  
      "employeeId":2,
      "firstName":"Bob",
      "lastName":"Test",
      "email":null,
      "phoneNumber":null,
      "street":"1234 Sesame",
      "city":"New York City",
      "state":"New York",
      "zip":"34555",
      "activeFlag":true,
      "homeLocationId":2,
      "homeLocation":{  
         "locationId":2,
         "customerId":2,
      },
      "displayName":"Bob Test -  Newaygo"    },    
 {  
      "employeeId":4,
      "firstName":"John",
      "lastName":"Doe",
      "email":"testemployee@qas.com",
      "street":"1234 Sesame St",
      "city":"New York City",
      "state":"New York",
      "zip":"34555",
      "activeFlag":true,
      "homeLocationId":2,
      "homeLocation":{  
         "locationId":2,
         "customerId":2,
      },
      "displayName":"John Doe -  Newaygo"    },    
 {  
      "employeeId":5,
      "firstName":"Bill",
      "lastName":"Peterson",
      "email":"bpeterson@test.com",
      "street":"1234 test",
      "city":"test city",
      "state":"Maine",
      "zip":"298379283",
      "activeFlag":false,
      "homeLocationId":2,
      "homeLocation":{  
         "locationId":2,
         "customerId":2,
      },
      "displayName":"Bill Peterson -  Newaygo"    },    
 {  
      "employeeId":6,
      "firstName":"Jim",
      "lastName":"Super",
      "email":"jsuper@qas.com",
      "phoneNumber":"459-456-4455",
      "street":"1234 Sesame St",
      "city":"New York City",
      "state":"New York",
      "zip":"34555",
      "activeFlag":true,
      "homeLocationId":2,
      "homeLocation":{  
         "locationId":2,
         "customerId":2,
      },
      "displayName":"Jim Super -  Newaygo"    } ]

在JavaScript中,对象由引用引用,所有其他值(无论它们是否在数组中)由值引用。如果需要获得此行为,可以将值存储在对象中并引用/传递该值

下面的两个方法都使用对象,并且都有引用引用。这两个代码片段验证:

方法1

var vm={};
//这里,数组的内容是ojbects(通过引用)
vm.allEmployees=[{
“雇员ID”:1,
“名字”:“比尔”,
“lastName”:“Test”,
“电子邮件”:空,
“电话号码”:空,
“街道”:“1234芝麻”,
“城市”:“纽约市”,
“州”:“纽约”,
“zip”:“34555”,
“activeFlag”:正确,
“homeLocationId”:2,
“homeLocation”:{
“locationId”:2,
“客户ID”:2,
},
“displayName”:“Bill Test-Newaygo”},
{  
“雇员ID”:2,
“名字”:“鲍勃”,
“lastName”:“Test”,
“电子邮件”:空,
“电话号码”:空,
“街道”:“1234芝麻”,
“城市”:“纽约市”,
“州”:“纽约”,
“zip”:“34555”,
“activeFlag”:正确,
“homeLocationId”:2,
“homeLocation”:{
“locationId”:2,
“客户ID”:2,
},
“displayName”:“Bob Test-Newaygo”},
{  
“雇员ID”:4,
“名字”:“约翰”,
“姓氏”:“能源部”,
“电子邮件”:testemployee@qas.com",
“街道”:“芝麻街1234号”,
“城市”:“纽约市”,
“州”:“纽约”,
“zip”:“34555”,
“activeFlag”:正确,
“homeLocationId”:2,
“homeLocation”:{
“locationId”:2,
“客户ID”:2,
},
“displayName”:“John Doe-Newaygo”},
{  
“雇员ID”:5,
“名字”:“比尔”,
“姓氏”:“彼得森”,
“电子邮件”:bpeterson@test.com",
“街道”:“1234测试”,
“城市”:“试验城市”,
“州”:“缅因州”,
“zip”:“298379283”,
“activeFlag”:false,
“homeLocationId”:2,
“homeLocation”:{
“locationId”:2,
“客户ID”:2,
},
“displayName”:“Bill Peterson-Newaygo”},
{  
“雇员ID”:6,
“名字”:“吉姆”,
“姓氏”:“超级”,
“电子邮件”:jsuper@qas.com",
“电话号码”:“459-456-4455”,
“街道”:“芝麻街1234号”,
“城市”:“纽约市”,
“州”:“纽约”,
“zip”:“34555”,
“activeFlag”:正确,
“homeLocationId”:2,
“homeLocation”:{
“locationId”:2,
“客户ID”:2,
},
“displayName”:“Jim Super-Newaygo”}]
vm.allEmployeesOnJob=[];
var=[2,1]

对于(var i=0;iSo因为我引用了vm.allEmployees数组中的元素,它们是对象,上面的方法1不应该仍然通过引用设置vm.allEmployeesOnJob中的元素吗?你能发布更多的代码吗?具体来说,
vm.allEmployees
的内容是什么?@big\u water你的两个方法都是通过引用的,因为
allEmployees
>存储对象。请参阅我对两种方法的测试。谢谢@ScottMarcus。您的测试事实上证明这两种方法都是通过引用实现的。这一定是angular bootstrap duallistbox及其如何处理这些对象的问题。这与JavaScript本身无关,但与AngularJS的
ng model
如何观察其价值有关e、 我建议对你的问题和标题进行修改,以更清楚地表明你对AngularJS的使用。你还可以展示你如何为两个选择绑定
ng模型
ng选项
。关于角度部分@MikeMcCaughan的观点很好。但是,问题的javascript部分是我问题的主要关注点。Scott的回答下面回答了这个问题,所以我想我可能会把这个问题的棱角部分留给另一个帖子,如果我不能让它工作的话。
[      {  
      "employeeId":1,
      "firstName":"Bill",
      "lastName":"Test",
      "email":null,
      "phoneNumber":null,
      "street":"1234 Sesame",
      "city":"New York City",
      "state":"New York",
      "zip":"34555",
      "activeFlag":true,
      "homeLocationId":2,
      "homeLocation":{  
         "locationId":2,
         "customerId":2,
      },
      "displayName":"Bill Test - Newaygo"    },    
 {  
      "employeeId":2,
      "firstName":"Bob",
      "lastName":"Test",
      "email":null,
      "phoneNumber":null,
      "street":"1234 Sesame",
      "city":"New York City",
      "state":"New York",
      "zip":"34555",
      "activeFlag":true,
      "homeLocationId":2,
      "homeLocation":{  
         "locationId":2,
         "customerId":2,
      },
      "displayName":"Bob Test -  Newaygo"    },    
 {  
      "employeeId":4,
      "firstName":"John",
      "lastName":"Doe",
      "email":"testemployee@qas.com",
      "street":"1234 Sesame St",
      "city":"New York City",
      "state":"New York",
      "zip":"34555",
      "activeFlag":true,
      "homeLocationId":2,
      "homeLocation":{  
         "locationId":2,
         "customerId":2,
      },
      "displayName":"John Doe -  Newaygo"    },    
 {  
      "employeeId":5,
      "firstName":"Bill",
      "lastName":"Peterson",
      "email":"bpeterson@test.com",
      "street":"1234 test",
      "city":"test city",
      "state":"Maine",
      "zip":"298379283",
      "activeFlag":false,
      "homeLocationId":2,
      "homeLocation":{  
         "locationId":2,
         "customerId":2,
      },
      "displayName":"Bill Peterson -  Newaygo"    },    
 {  
      "employeeId":6,
      "firstName":"Jim",
      "lastName":"Super",
      "email":"jsuper@qas.com",
      "phoneNumber":"459-456-4455",
      "street":"1234 Sesame St",
      "city":"New York City",
      "state":"New York",
      "zip":"34555",
      "activeFlag":true,
      "homeLocationId":2,
      "homeLocation":{  
         "locationId":2,
         "customerId":2,
      },
      "displayName":"Jim Super -  Newaygo"    } ]