2016-04-29 40 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。 (http://plnkr.co/), [JS Bin](https://jsbin.com/) 或片段(位於文本編輯器工具欄或CTRL + M上的第7個圖標)。 – 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

這只是爲了捕捉錯誤,所以索引不會超出範圍。防爆。如果您添加了一個動物但忘記在函數參數中添加一個計數,如果您使用兩個長度的最小值,則不會出現錯誤。 – DHP

1

下面是做這件事的兩個方面...

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

更好的方法是創建一個動物類併爲每個動物創建一個對象。這是一個粗略的例子,但顯示了這個想法。

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/

相關問題