2017-05-11 20 views
-1

行と列にng-repeatを使用して作成された表があります。JavascriptでネストされたJSONにJSONを追加する

ng-model="tableValues[row][column]" 

ここで、行と列の値はng-repeatに由来します。テーブルのデータはドロップダウンです。私は値のリストからこのデータを入力したい。

コントローラからng-modelに値を書き込む際に、カラムの値が上書きされます。

var x ={}; 
for(objData){ 
     row = objData[i]["row"]; 
     column = objData[i]["column"]; 
     value = objData[i]["value"]; 
     x[row]={}; 
     x[row][column]=value; 
     vm.tableValues=x; 
} 

// objDataは、値を含むオブジェクトとそれに対応する行と列のオブジェクトの配列です。

これは正しいJSONを作成していますが、列の値を上書きしています。

{"r1":{"c1":"v1"},"r2":{"c2":"v2"},"r3":{"c2":"v2"}} 

私は

{"r1":{"c1":"v1","c2":"v2","c3":v3,"c4":"v4"}, 
{"r2":{"c1":"v1","c2":"v2","c3":v3,"c4":"v4"}.......} 
so forth.. 

ではなくコンマで行JSONの内のすべての列の値を入れて欲しいもの、それは前の列の値を上書きします。

+0

ループを行とcolums上。行配列のみをループしているため、この結果が得られます。またはここにループのコードを貼り付けます – sabith

+0

ループは各オブジェクトの行、列、および値を持つオブジェクトのリスト用です。私が間違っていることで私を助けてくれますか? – Api

答えて

3

あなたが行とcolumsの両方に減らす使用することができます。

var rows = ['r1', 'r2', 'r3', 'r4', 'r5']; 
 
var columns = ['c1', 'c2', 'c3']; 
 
var values = ['v1', 'v2', 'v3']; 
 

 
let res = rows.reduce((p, k) => { 
 
    p[k] = columns.reduce((a, b, i) => { 
 
    a[b] = values[i] || "no value"; 
 
    return a; 
 
    }, {}); 
 
    return p; 
 
}, {}); 
 

 
console.log(res);

+0

ありがとうございます。長さと列の配列が同じでないときはどうなりますか?私はより良い理解のために私の質問を編集しました。 – Api

+0

@Apiあなたの質問で何が起こるべきかについての説明は表示されませんが、値の配列に一致しない場合のデフォルト値を返すように答えを編集しました。 – baao

+0

私の列の値の数は値と同じではありません。私の質問をもう一度見てください。私はもう一度それを更新しました。 – Api

1

はこれを試してみてください。

var x ={}; 
 
    var rows=["r1","r2","r3","r4","r5"] 
 
     var columns=["c1","c2","c3"] 
 
     var values = ["v1","v2","v3"] 
 
     
 
    for(var i=0;i<rows.length;i++){ 
 
     for(var j=0;j<columns.length;j++){ 
 
     if(!x[rows[i]]) 
 
      x[rows[i]]={}; 
 
     x[rows[i]][columns[j]]=values[j] || "no data"; 
 
     } 
 
    } 
 
    console.log(x);

+0

私の問題はうまくいきません。状況をより正確に反映するために編集した私の質問を親切に見てください。 – Api

関連する問題