2017-10-10 20 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); 
相关问题