2017-10-10 51 views
0
function generateRandomAnimals(num){ 
    var arr = []; 
    for(var i = 0; i < num; i++){ 
     arr.push(randomAnimal()); 
    } 
    return arr; 
} 

function generateRandomAnimalsNames(num){ 
    var arr = []; 
    for(var i = 0; i < num; i++){ 
     arr.push(randomAnimal()); 
    } 
    return arr; 
} 

function randomAnimal(){ 
    var rand = Math.floor(Math.random()*animals.length); 
    var animal = animals[rand]; 
    var animalName = animalNames[rand]; 
    return animal; 
    return animalName; 
} 

我想將動物返回給generateRandomAnimals數組,並將animalName返回到generateRandomAnimalsNames數組。但由於我們不能從一個函數返回兩個值,我們如何返回它們並分別使用它們來推入上面給出的不同數組? 注意:動物和動物名稱是不同的數組創建的元素數量可供選擇。獲取多個函數返回並將它們用於javascript中的不同數組中

+0

嘗試返回一個包含 – tommyO

+0

你期望通過'generateRandomAnimals'返回對應於'generateRandomAnimalsNames'的條目中的條目的所有項目的數組?整個設置對我來說似乎有點奇怪,所以我不確定在這裏提出什麼建議。你最終想達到什麼目標?即你最終想得到什麼數據? –

+0

@費利克斯國王。是的,這就是我想要的。它是一個匹配的應用程序,以匹配動物的名稱和它的圖片。這就是爲什麼我需要在兩個陣列(動物和動物名稱)上應用相同的隨機數。但是您提供的解決方案是爲兩者生成不同的隨機數。有沒有什麼辦法可以產生相同的隨機數從兩個數組中獲得相同的索引號? – shi2056

回答

0

函數可以返回一個對象,像一個數組或普通對象:

function generateRandomAnimals(num){ 
    var arr = []; 
    for(var i = 0; i < num; i++){ 
     arr.push(randomAnimal().animal); // get property of interest 
    } 
    return arr; 
} 

function generateRandomAnimalsNames(num){ 
    var arr = []; 
    for(var i = 0; i < num; i++){ 
     arr.push(randomAnimal().animalName); // get property of interest 
    } 
    return arr; 
} 

function randomAnimal(){ 
    var rand = Math.floor(Math.random()*animals.length); 
    var animal = animals[rand]; 
    var animalName = animalNames[rand]; 
    return { animal, animalName }; // return object with 2 properties (ES6 short notation) 
} 

儘管這可能會回答你的問題,在我看來你是將屬於一個整體分成兩個單獨的陣列,事情只有一個數組中的索引決定了在哪裏查找與之相關的其他值。

使用對象,在這種情況下有兩個屬性,如修改後的randomAnimal函數返回,這是更好的做法。你可以只是把這些對象整體一個陣列:

function generateRandomAnimals(num){ 
    var arr = []; 
    for(var i = 0; i < num; i++){ 
     arr.push(randomAnimal()); // now you have both properties 
    } 
    return arr; 
} 

function randomAnimal(){ 
    var rand = Math.floor(Math.random()*animals.length); 
    var animal = animals[rand]; 
    var animalName = animalNames[rand]; 
    return { animal, animalName }; // return object with 2 properties (ES6 short notation) 
} 

然後,您可以訪問一個這樣的動物是這樣的:

var arr = generateRandomAnimals(10); 
console.log(arr[0].animal, arr[0].animalName); 
+0

動物和動物數組是相等的,除了aniaml [i]有url和animalName [i]分別有它的名字。上面的語法爲它們提供了不同的數組,例如它們選擇的動物數組i = 5,9,11,以及來自它選擇的動物數組i = 4,8,15,因爲它們的隨機數是相同的並且元素彼此對應,他們是不是想從數組中選擇相同的索引數? – shi2056

+0

是的,你想告訴我什麼? – trincot

1

這個答案可能會或可能不會幫助,這取決於在你的代碼的其餘部分和你最終的目標。它假定generateRandomAnimalsgenerateRandomAnimalsNames的返回值是獨立的。

從你發佈的內容來看,稍微好一點的代碼設計應該是通用的「從數組中挑選隨機元素」函數,並且generateRandomAnimalsgenerateRandomAnimalsNames可以傳遞所需的數組。那麼就沒有必要「返回多個值」。

function generateRandomAnimals(num){ 
    var arr = []; 
    for(var i = 0; i < num; i++){ 
     arr.push(randomElement(animalNames)); 
    } 
    return arr; 
} 

function generateRandomAnimalsNames(num){ 
    var arr = []; 
    for(var i = 0; i < num; i++){ 
     arr.push(randomElement(animals)); 
    } 
    return arr; 
} 

function randomElement(array){ 
    var rand = Math.floor(Math.random()*array.length); 
    return array[rand]; 
} 

另一種解決方案是將動物和它們的名字存儲在一個數組中。

+0

你比我想象的更深一層,恭喜! – Taurus

+0

這是一個匹配的應用程序,以匹配動物的名稱和它的圖片。這就是爲什麼我需要在兩個陣列(動物和動物名稱)上應用相同的隨機數。但是您提供的解決方案是爲兩者生成不同的隨機數。有沒有什麼辦法可以產生相同的隨機數從兩個數組中獲得相同的索引號? – shi2056

1

您只能使用一個return聲明,true。但是,如果要返回多於一個值,你可以只使用一個對象(非常類似於關聯數組在PHP語言):

var animal = animals[rand]; 
var animalName = animalNames[rand]; 
return { 
    "animal": animal, 
    "animalName": animalName 
}; 

然後你就可以從抓住個別項目使用此語法的對象:obj["property_name"]


但是,因爲你沒有做在每個功能(generateRandomAnimalsgenerateRandomAnimalsNames)任何使用這兩個值的,我相信這將是更好,更美,如果你的代碼看起來像這樣(考慮到你的animalsanimalNames變量是什麼樣子我覺得他們的樣子):

var animals = [{"name": "Dog"}, {"name": "Cat"}, {"name": "Cow"}]; 
var animalNames = ["Dog", "Cat", "Cow"]; 

function generateRandomAnimals(num){ 
    var arr = []; 
    for(var i = 0; i < num; i++){ 
     arr.push(randomAnimal()); 
    } 
    return arr; 
} 

function randomAnimal() { 
var rand = Math.floor(Math.random()*animals.length); 
var animal = animals[rand]; 
return animal; 
} 

function generateRandomAnimalsNames(num){ 
    var arr = []; 
    for(var i = 0; i < num; i++){ 
     arr.push(randomAnimalName()); 
    } 
    return arr; 
} 

function randomAnimalName(){ 
var rand = Math.floor(Math.random()*animals.length); 
var animalName = animalNames[rand]; 
return animalName; 
} 

var random_animals = generateRandomAnimals(5); 
var random_animal_names = generateRandomAnimalsNames(5); 
相關問題