-1

いわば配列自体であるオブジェクトの配列を読み込もうとしています。だから私は名前(メンバー)の配列を持っているので、名前、バグ、強化などを名前ごとに1行に持つマスターリストを作成しています。したがって、単純な for ループを実行してマスター リストをロードしますが、for (0) i, masterList[i].name は未定義であるためロードできないことがわかります。これを回避する方法はありますか?ありがとう

 var mem = getMembers();//get a array of members
 var memlen = mem.length;
 var masterList = [memlen]; //set to number of members
 for(i=0; i < memlen; i++){  
    masterList[i].name = mem[i];  //set .name to the members list name at i
    masterList[i].bugs = 0; 
    masterList[i].enhance = 0; 
    masterList[i].epic = 0; 
    masterList[i].dev = 0; 
    masterList[i].high = 0;
  }
4

4 に答える 4

6

定義済みのサイズで配列を作成するには、次を使用します。

masterList = new Array(memlen);

masterList = [memlen]最初の項目が である配列を作成しただけですmemlen。配列はループ内で自動的に成長していたため、これはそれほど問題ではありませんでしたが、それはあなたの意図ではありませんでした)

その後、それぞれを作成する必要がありますmasterList[i]:

var masterList = new Array(memlen);
for (var i=0; i < memlen; i++){  
    masterList[i] = {};
    masterList[i].name = mem[i];  //set .name to the members list name at i

そうしないとundefined、エラーになるためです。

varという名前の別の変数が誤って消去されないように、ループ宣言にも追加しましたi

于 2012-10-03T18:47:16.070 に答える
1

正しいバージョンは次のとおりです。

var mem = getMembers();//get a array of members
var memlen = mem.length;
var masterList = []; //set to number of members
for(var i=0; i < memlen; i++){  
    masterList[i] = {
        name: mem[i],  //set .name to the members list name at i
        bugs: 0, 
        enhance: 0, 
        epic: 0, 
        dev: 0, 
        high: 0
    };
}
于 2012-10-03T18:51:47.950 に答える
0

これは長さを設定しません。単一のメンバーが長さに設定された新しい配列を作成するだけです。

var masterList = [memlen]; //set to number of members

すでにアレイを持っているように見えるので.map、新しいアレイを構築するために使用できます。

 var mem = getMembers();
 var masterList = mem.map(function(item) {
    return {
        name: item.name, bugs: 0, enhance: 0, epic: 0, dev: 0, high: 0
    };
 });
于 2012-10-03T18:51:01.877 に答える
0

var x = [7];7 要素配列を作成しません。インデックス 0、値 7 の 1 つの要素配列を作成します。var x = array(7)代わりに、ループ内でこれらの各要素を代わりにオブジェクトになるように初期化する必要があります。

于 2012-10-03T18:49:59.970 に答える