2016-11-30 13 views
1

明示的に配列要素を値ではなく参照として設定する方法はありますか?例えばJavascript配列要素を参照または値で割り当てる

は、この方法は、値によって配列要素を設定:

METHOD 1

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

そしてこの方法は、参照することにより、配列要素を設定:

METHOD 2

var pushes = [2,1] 
vm.allEmployeesOnJob = [ 
       vm.allEmployees[2], 
       vm.allEmployees[1]     
       ]; 

私のユースケース:

私は角-ブートストラップ・duallistboxを使用していますが、正しく2つのリストボックスを初期化するために、「NG-モデル」配列は、参照することにより、「NG-オプション」配列要素を参照する必要があります。これは、私が読んだ説明から、 "select" DOM要素の振る舞いが原因です。リストボックスがそのメソッドを使用して正しく更新され、最初のメソッドを使用して正しく更新されないため、2番目が参照によって設定されていることがわかります。

違いは何ですか?

また、配列要素を別の配列の要素にプログラムで設定する方法はありますか?

EDIT:

vm.allEmployees従業員オブジェクトの配列です。 vm.allEmployeesの

コンテンツ:JavaScriptオブジェクトで

[  { 
     "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":"[email protected]", 
     "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":"[email protected]", 
     "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":"[email protected]", 
     "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" } ] 
+1

これは、とはほとんどを持っていますJavaScriptそのものですが、AngularJSの「ng-model」がその価値をどのように見ているかに関連しています。 AngularJSの使用をより明確に示すために、あなたの質問とタイトルを[編集]することをお勧めします。両方の選択に対して 'ng-model'と' ng-options'をどのようにバインドしているかを示すこともできます。 –

+0

角度部分の良い点@MikeMcCaughan。しかし、質問のjavascriptの部分は私の質問の大きな懸念でした。下のスコットの答えはその質問に答えたので、私はそれを得ることができない場合、私は別のポストのためにこの質問の角の部分を残すかもしれないと思う。 –

答えて

2

参照によって参照され、すべての他の値(かかわらず、それらが配列内であるかどうかの)の値によって参照されています。オブジェクトに値を格納し、この動作を取得する必要がある場合は、その値を参照/渡すことができます。

以下のいずれの方法もオブジェクトで作業しており、参照によって参照されています。これら二つのスニペットは、次の点を確認してください

METHOD 1

var vm = {}; 
 

 
// Here, the contents of the array are ojbects (by reference) 
 
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":"[email protected]", 
 
     "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":"[email protected]", 
 
     "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":"[email protected]", 
 
     "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" } ] 
 

 
vm.allEmployeesOnJob = []; 
 

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

 
// The references are by reference: 
 
console.log("Are objects in allEmployeesOnJob the same references as allEmployees: " + (vm.allEmployeesOnJob[0] === vm.allEmployees[2] && vm.allEmployeesOnJob[1] === vm.allEmployees[1])); 
 

 
// More evidence: 
 
vm.allEmployees[2].employeeId= 999; 
 
console.log("allEmployees[2].employeeId= 999. allEmployeesOnJob[0].employeeId is now: " + vm.allEmployeesOnJob[0].employeeId);

METHOD 2

var vm = {}; 
 
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":"[email protected]", 
 
     "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":"[email protected]", 
 
     "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":"[email protected]", 
 
     "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" } ] 
 

 
var pushes = [2,1] 
 
vm.allEmployeesOnJob = [ 
 
       vm.allEmployees[2], 
 
       vm.allEmployees[1]     
 
       ]; 
 

 
console.log("Are objects the same (by ref)? " + (vm.allEmployeesOnJob[0] === vm.allEmployees[2] && 
 
      vm.allEmployeesOnJob[1] === vm.allEmployees[1])); 
 

 
// Further evidence: 
 
vm.allEmployees[2].employeeId = 999; 
 
console.log("allEmployees[2].employeeId was changed to 999. What is allEmployeesOnJob[0].employeeId now? " + vm.allEmployeesOnJob[0].employeeId);

+0

オブジェクトであるvm.allEmployees配列の要素を参照しているので、上記の方法1は、参照によってvm.allEmployeesOnJobの要素を設定してはいけませんか? –

+0

もっとコードを投稿できますか?具体的には、 'vm.allEmployees'の内容は何ですか? –

+0

私は上記の編集を行いました –

関連する問題