2016-05-31 2 views
0

入力番号の引数に基づいてオンザフライで動的にオブジェクトを作成する関数を作成しようとしていますが、Object.create()の部分を反復する問題が発生しています。私はforループで私のiをどこで演奏するのかはわかりませんが、理想的にはsportsArrayオブジェクトはすべてsportsArrayに格納されています。それは少なくとも目標です。javascriptでObject.createを使って多くのオブジェクトを作成するためにforループを反復処理する方法はありますか?

あなたがループ内の配列内のオブジェクトをプッシュするだけで済みます
function car(doors, capacity, storage) { 
    this.doors = doors; 
    this.capacity = capacity; 
    this.storage = storage; 
}; 


var van = Object.create(car); 
van.doors = 4; 
van.storage = "rear storage"; 

var miniVan = Object.create(van); 
miniVan.capacity = "200 LB"; 

var cargoVan = Object.create(van); 
cargoVan.capacity = "800 LB"; 

var truck = Object.create(car); 
truck.doors = 2; 
truck.storage = "bed"; 
truck.capacity = "1500 LB"; 

var familyCar = Object.create(car); 
familyCar.doors = 4; 
familyCar.storage = "large trunk"; 
familyCar.capacity = "300 LB"; 

var sportsCar = Object.create(car); 
sportsCar.doors = 2; 
sportsCar.storage = "small trunk"; 
sportsCar.capacity = '100 LB'; 

function tally(n1, n2, n3, n4, n5) { 
     var sportArray = []; 
     var familyArray = []; 
     var truckArray = []; 
     var miniArray = []; 
     var cargoArray = []; 

    sportsObjs = for(var i = 0; i < n1; i++){ 
     Object.create(sportsCar); 
    } 

    sportArray.push(sportsObjs); 

    for (var i = 0; i < n2; i++){ 
     Object.create(familyCar); 
    } 

    for(var i = 0; i < n3; i++){ 
     Object.create(truck) 
    } 

    for(var i = 0; i < n4; i++){ 
     Object.create(miniVan) 
    } 

    for(var i = 0; i < n5; i++){ 
     Object.create(cargoVan) 
    } 

    return console.log(sportsArray); 

} 
+0

'' car'は期待通りに機能しません。コンストラクタ関数です。 'car'をプロトタイプオブジェクトにしてオブジェクトリテラルにします。 – Bergi

+0

@Bergiあなたは私のために明確にすることができますか?私はecma5標準で正しく設定したと思った。 – cristodagama

+0

@Bergi理想的には、集計機能のすべての.capacityプロパティにアクセスできるようにしたい。/ – cristodagama

答えて

1
sportsObjs = for(var i = 0; i < n1; i++){ 
    Object.create(sportsCar); 
} 

sportArray.push(sportsObjs); 

プレーン構文エラーです:私はこのようにタリーを呼び出す){ ... } ... }

++を。ループはJavaScriptでは文ではなく、式であり、値を生成しません。変数に割り当てることはできません。実際には、新しく作成した各オブジェクトを変数に代入し、次にその特定の新しいオブジェクトを配列にプッシュします:

for (var i = 0; i < n1; i++){ 
    var sportsObj = Object.create(sportsCar); 
    sportArray.push(sportsObj); 
} 
+0

oh duh。今私は気が気になりません。早朝に私は推測する。あなたの助けをありがとう – cristodagama

+0

私は間違いなくそうするが、これは新しいアカウントであり、私は笑をupvoteに15ポイントを取得する必要があります。時代に遅れて。私は4分で受け入れるだろう:) – cristodagama

0

function tally(n1, n2, n3, n4, n5) { 
    var sportArray = []; 
    var familyArray = []; 
    var truckArray = []; 
    var miniArray = []; 
    var cargoArray = []; 

    for(var i = 0; i < n1; i++){ 
     sportArray.push(Object.create(sportsCar)); // To create a generic Object sportArray.push({}); 
    } 

    .... // And so on for all the arrays 
} 

問題は、彼らが体の外に表示されていないので、あなたはVARなど、異なる配列を宣言したということです関数。パラメータを持つよりsuccintであるために

var result = tally(3, 4, 5, 6, 7); 
console.log(result.sportArray.length); 

function tally(n1, n2, n3, n4, n5) { 
    var sportArray = []; 
    var familyArray = []; 
    var truckArray = []; 
    var miniArray = []; 
    var cargoArray = []; 

    ... 

    return { 
     sportArray: sportArray, 
     familyArray : familyArray, 
     truckArray: truckArray, 
     miniArray: miniArray, 
     cargoArray: cargoArray 
    } 
} 

だからあなたのような何かを行うことができます:

あなたはすべてのアレイ、そのようなことをcontaingオブジェクトを返す必要があります。

関数タリー(パラメータ){ ... for(var i = 0; i < parameters.n1;

var result = tally({n1: 3, n2:4, n3:5, n4:6, n5:7}); 
+0

私は自分のオブジェクトチェーンをどのように作成したかによって動作しないと思います。 – cristodagama

+0

とにかく、引数paramのパスのように、私のパラメータでより簡潔にすることはできますか? – cristodagama

+0

はい、{n1:3、n2:4、n3:5、n5:6、n:7}のような必要な値をすべて保持するオブジェクトを作成できますが、同じ方法でコードを更新する必要があります –

関連する問題