0

私は私のjavascriptを改善しようとしており、ここで行き止まりになっています。

var schemes = {
    "own" : {
        "creatures" : ["creature1","creature2","creature3","creature4"],
        "spells" : ["spell1","spell2","spell3","spell4"],
        "items" : ["item1","item2","item3","item4"]
    },
    "enemy" : {
        "creatures" : ["creature1","creature2","creature3","hidden"],
        "spells" : ["spell1","spell2","hidden","hidden"],
        "items" : ["item1","item2","item3","hidden"]
    }
};

これは私の配列です。

次に、 for each を実行しようとしています(phpから知っているように)が、javascriptはスキームがオブジェクトであると考えているため、次のことを実行できないようです:

for (var i=0;i<schemes.length;i++) {
 //code 
}

私は何が欠けていますか?schemes.length は未定義と言う

4

3 に答える 3

4

schemesは確かに「オブジェクト」であり、そのためにはありません.length

Object.keys(schemes)キーの配列を取得するために使用できます。または、次のようにします。

for (var key in schemes) {
    var el = schemes[key];
     ...
}
于 2012-11-21T11:26:24.293 に答える
2

schemes配列ではなく、実際にはオブジェクトであるという事実を見逃しています。

次のことを考慮してください。

myobject = { 'a' : 1, 'b' : 2, 'c' : 3 } // this is an object

myarray = [ 1, 2, 3 ] // this is an array

そして、これらの変数で何ができるか:

for (var key in myobject) {
    console.log(key + ": " + myobject[key]);
}

for (var i = 0; i < myarray.length; i++) {
    console.log('Value at index ' + i + ':' + myarray[i]);
} 
于 2012-11-21T11:26:13.497 に答える
2

スキームはオブジェクトです。オブジェクトの配列にしたいのではないかと思います。

var schemes = [{
    "own" : {
        "creatures" : ["creature1","creature2","creature3","creature4"],
        "spells" : ["spell1","spell2","spell3","spell4"],
        "items" : ["item1","item2","item3","item4"]
    },
    "enemy" : {
        "creatures" : ["creature1","creature2","creature3","hidden"],
        "spells" : ["spell1","spell2","hidden","hidden"],
        "items" : ["item1","item2","item3","hidden"]
    }
}];

次に、次のように配列をトラバースできます。

for (var i=0;i<schemes.length;i++) {
  alert(schemes[i].creatures[1]); //alerts creature1 (2x)
}
于 2012-11-21T11:26:31.127 に答える