2016-09-10 18 views
2

JavaScriptを使用して配列リストを作成しています。2つのデータが一致している場合、データをjavascript配列にプッシュする(AngularJS)

データを追加するフォームがあり、フォームの下にあるdivに挿入するボタンがあります。このdivは配列です。

このフォームの重要な部分はrequest_areaです。すべての製品にrequest_areaがあります。だから、同じrequest_areaでdivを何度も繰り返して押すのではなく、私はそれを "グループ化"したいと思う。そこでここでは、ユーザーが製品をステップ

空1.Array追加され、要求エリアで作成した後、1つのdivの1

2.Requestエリア1が存在し、ユーザーが同じ要求で他の製品を追加したがって、リクエストエリア1内には2つの製品が必要です。

3.ユーザーが別のrequest_areaを持つ別の製品を入力した場合、アレイは2つのオブジェクト(要求領域1と2)で構成されている必要があります。

は、ここで上記のコードは同じrequest_areaに製品を追加することを除いて、うまく機能している

vm.request_area = []; 

function insertProduct(){ 
var data = { 
     code: vm.data.code, 
     qty: vm.data.qty, 
     area: vm.data.area, 
     description: vm.data.description, 
     uom: vm.data.uom, 
     index_number: vm.data.index_number 
}; 
    var exist = false; 
    var number; 
    for(var i = 0; i < vm.request_area.length; i++){ 
     if(vm.data.area == vm.request_area[i].request_area){ 
      exist = true; 
      number = i; 
      break; 
     } 
    } 
    if(exist){ 
     vm.request_area[number].details.push({data}); 
    } 
    else{ 
     vm.request_area.push({ 
      request_area: vm.data.area, 
      details: {data} 
     }); 
    } 
} 

私のコードです。次のコードは私に与えます

if(exist){ 
     vm.request_area[number].details.push({data}); 
    } 

vm.request_area[number].push is not a function 

私は製品を追加することができますし、すべてうまくいきます。既存のrequest_areaへの製品の追加のみが失敗します。

ここには何がありますか?ありがとうございました:)

答えて

0

あなたは本質的に、型配列ではなく、プッシュしようとしているあなたのコード内のものをターゲットにしています。 vm.request_areaは配列です。 vm.request_area [number]は配列内のエントリであり、したがって配列ではありません(ネストされた配列でない限り、それは正しいとは思いません)。

複数の一致が予想される場合は、オブジェクトの配列を作成することができます。これは残酷かもしれないが、私はあなたのユースケースについて完全にはわからない。

あなたはここでループを持っている:

for(var i = 0; i < vm.request_area.length; i++){ 
    if(vm.data.area == vm.request_area[i].request_area){ 
     exist = true; 
     number = i; 
     break; 
    } 
} 

この中にあなたのチェックをしないのはなぜ?

for(var i = 0; i < vm.request_area.length; i++){ 
    if(vm.data.area == vm.request_area[i].request_area){ 
     number = i; 
     vm.request_area[number] = {details: 'foo'} 
    } 
} 

数値キー付きオブジェクトの配列を作成する必要があります。 IE:

[1: {details: 'abc'}, 2: {details: 'xyz'}] 
+0

ですから、ユーザーからの新しい製品入力を既存のrequest_areaに追加するにはどうすればよいですか? – Vinfoster0701

+0

さん、私はあなたのコードをこのvm.request_area [number] = {details:data}で編集しました。今ではそれが私に6つの空の製品を与えます。なにが問題ですか? – Vinfoster0701

+0

vm.request_area [0] .detailsはnullですか?もしそうなら、渡されたデータはnullでした。 – Peege151

0
vm.request_area.push({ 
      request_area: vm.data.area, 
      details: {data} 
     }); 

あなただけでvm.request_area、ない配列にオブジェクトをプッシュしているようです。したがって、vm.request_area [number]は配列の代わりに通常のオブジェクトです。pushのようなメソッドはありません。

関連する問題