从函数中获取多个返回值,并在javascript中的不同数组中使用它们

时间:2017-10-10 20:20:00

标签: javascript dom

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数组。但由于我们无法从一个函数返回两个值,我们如何返回它们并分别使用它们来推送上面给出的不同数组? 注意:animals和animalNames是使用多个元素创建的不同数组。

3 个答案:

答案 0 :(得分:1)

这个答案可能会有所帮助,也可能没有帮助,具体取决于您的其余代码和最终目标。它假定generateRandomAnimalsgenerateRandomAnimalsNames的返回值是独立的。

从您发布的内容来看,稍微好一点的代码设计就是从数组中选择一个通用的#34;随机元素&#34;函数并让generateRandomAnimalsgenerateRandomAnimalsNames传递所需的数组。然后就不需要&#34;返回多个值&#34;。

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];
}

另一个解决方案是将动物及其名称存储在一个阵列中。

答案 1 :(得分: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);

答案 2 :(得分: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);