2016-04-29 4 views
-1

動物を印刷する最良の方法は何ですか?将来の動物がコードを変更することなく表示されることを保証しますか?私のトライアウトは農家「印刷動物」にとって最も機能的な解決策は何ですか?

var animals = ["Cows", "Chickens", "Pigs", "Horses"]; 

var printFarm = function(a, b, c, d){ 

console.log("You have " + a + " " + animals[0]); 
console.log("You have " + b + " " + animals[1]); 
console.log("You have " + c + " " + animals[2]); 
console.log("You have " + d + " " + animals[3]); 

}; 

printFarm(3, 6, 17, 54); 
+1

なぜパラメータの番号がありますか?各数字は動物を表していますか?このコードを実行し、devtoolsのエラーを確認しましたか? あなたの質問に関連するJavaScript/jQuery、CSS、およびHTMLを投稿してください。 [jsFiddle.net](https://jsfiddle.net/)、 [CodePen.io](https://codepen.io/)、 [Plunker]のいずれかまたはすべてを使用してデモを作成します。 [JS Bin](https://jsbin.com/) またはスニペット(テキストエディタのツールバーにある7番目のアイコン、またはCTRL + M)をクリックします。 – zer00ne

+0

申し訳ありませんが、次回は間違いなく注目に値するデモthnxを作成します。 –

答えて

1

なぜ関数に整数配列を渡し、その後、あなたの動物の配列またはあなたの整数配列のいずれかでのアイテムの最小数が何であれでループをしませんか?

var animals = ["Cows", "Chickens", "Pigs", "Horses"]; 

var printFarm = function(animalCounts) { 

     var index = Math.min(animals.length, animalCounts.length); 

     for (var i = 0; i < index; i++) { 
      console.log("You have " + animalCounts[i] + " " + animals[i]; 
     } 
} 

printFarm([1,2,3,4]); 
+0

ありがとう、この例でMath.minが何をしているのか説明できますか?それは私が得ることができない唯一のものです。前もって感謝します! –

+1

エラーを捕捉するだけなので、インデックスが決して範囲外になることはありません。 Ex。動物を追加したにもかかわらず、関数のパラメータに数を追加するのを忘れた場合、2つの長さの最小値を使用している場合、エラーは発生しません。 – DHP

1

ここでそれを行うための2つの方法がありますが...

ので
var animals = ["Cows", "Chickens", "Pigs", "Horses"]; 

function printFarm(arrAnimals) { 
    for (var i = 0; i < arrAnimals.length; i++) { 
     var animalGroup = arrAnimals[i]; 
     var amount = printFarm.arguments[i + 1]; 
     if (amount) { 
      console.log('You have ' + amount + ' ' + animalGroup + '.'); 
     } else { 
      console.log('No amount was found for ' + animalGroup + '.'); 
     } 
    } 
} 

printFarm(animals, 3, 6, 17, 54); 

、あなたがする必要があるのは、新しい動物とを含めるように配列を変更することです...非常にアマチュアです上記のように、単にprintFarm関数呼び出しの最後に金額を追加してください。あるいは、動物配列に加えて、動物数の配列を関数に渡すこともできます。

または、動物の名前とオブジェクトの一部としてのカウントを持つanimalCountオブジェクトの配列を渡します。これと同じように...

var animals = [{ name:'cows', count:3 }, 
       { name:'chickens', count:6 }, 
       { name:'pigs', count:17 }, 
       { name:'horses', count:54 }]; 

function printFarm(arrAnimals) { 
    for (var i = 0; i < arrAnimals.length; i++) { 
     var animalGroup = arrAnimals[i]; 
     var name = animalGroup.name; 
     var amount = animalGroup.count; 
     console.log('You have ' + amount + ' ' + name + '.'); 
    } 
} 

printFarm(animals); 
1

もっと良いアプローチは、Animalクラスを作成し、必要な動物ごとにオブジェクトを作成することです。これは大まかな例ですが、そのアイディアを示しています。

function Animal(type, count) { 
    this.type = type; 
    this.count = count; 

    this.print = function() { 
    console.log("You have " + this.count + " " + this.type); 
    } 
} 

おそらくもっと良いアプローチは、新しい動物タイプがサブクラス化された動物ベースクラスですが、これはトリックです。

https://jsfiddle.net/f9n0en7e/

関連する問題