1

私のコードは次のとおりです。2つの配列[lab、val]があり、その値は動的にオブジェクトに渡されます。kはオブジェクトを保持する配列です

var lab = ["1","2","3",4];
var val = ["sa","ma","pa","da"];
var k = [];
for(var i=0; i<4; i++)  {
   data[i] = {};             
   data[i].label = lab[i];
   data[i].value = val[i]; 
   k.push(data[i]) ;  
}

document.write(k.data[0]);  
document.write(" " + k.data[0] + "<br />");
4

2 に答える 2

2

data変数が宣言されていないようです。ループの前に宣言してみてください。そこにいる間に、2でハードコーディングするのではなく、forループの条件を変更して配列の長さを確認することを検討してください。

var lab = ["1","2","3",4];
var val = ["sa","ma","pa","da"];
var k    = [],
    data = [];  // <----- here
for(var i = 0;  i < lab.length; i++)  {
   data[i] = {};             
   data[i].label = lab[i];
   data[i].value = val[i]; 
   k.push(data[i]) ;  
}

しかし、実際には、data配列のポイントは何ですか?持っているものすべての複製を保持しているように見えますk。なぜそうしないのですか?

var lab = ["1","2","3",4];
var val = ["sa","ma","pa","da"];
var k = [];

for(var i=0; i < lab.length; i++)  {
   k.push({
       label: lab[i],
       value: val[i]       
   });  
}
于 2012-12-05T05:06:43.563 に答える
1

すでにオブジェクトを配列にプッシュしているので、次のようにします-

var lab = ["1","2","3",4];
var val = ["sa","ma","pa","da"];
var k = [];
var obj;    // it will hold temporary object references

for(var i=0; i<4; i++)  {
   obj = {};             
   obj.label = lab[i];
   obj.value = val[i]; 
   k.push(obj) ;  
}

document.write(k[0].label);    // index k, rather than the value it contains 
document.write(" " + k[0].value + "<br />");

k格納する値にインデックスを付けており、data変数がどこにも宣言されていないため、コードが機能していません。

forオブジェクトを配列に直接プッシュすることでループを短縮することもできます。これはより良い方法です-

for(var i=0; i<4; i++)  {
   k.push({
       label: lab[i],
       value: val[i]
   }) ;  
}

このようにして、一時オブジェクトも必要ありません。

于 2012-12-05T05:07:12.270 に答える