打印动物的最佳方式是什么,同时确保未来的动物可以在不更改代码的情况下列出?我的试训很业余。。。
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);
为什么不向函数传递一个整数数组,然后用animals数组或整数数组中的最小项数进行循环?
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]);
更好的方法是创建一个Animal类,并为所需的每只动物创建一个对象。这是一个粗略的例子,但表明了这个想法。
function Animal(type, count) {
this.type = type;
this.count = count;
this.print = function() {
console.log("You have " + this.count + " " + this.type);
}
}
也许一个更好的方法是一个Animal基类,每个新的动物类型都添加了它的子类,但这确实奏效了。
https://jsfiddle.net/f9n0en7e/
这里有两种方法…
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);