简体   繁体   中英

Passing an array as a parameter to a function to pick a random string

I am currently doing a javascript course on udemy and ran into a problem with a small coding challenge. The code is supposed to pick a random person from an array. My code works on their test platform, but i cant get it to work in the chrome developer tools.

var names = ["Angela", "Ben", "Jenny", "Michael", "Chloe"];
 
function whosPaying(names) {
    var randomNumber = Math.random();
    var arrayLength = names.length;
    var hasToPay = Math.floor((arrayLength * randomNumber));
 
    return names[hasToPay] + " is going to buy lunch today!"
}
 
whosPaying();

If i write my code like this, it works in the test environment when I submit the code without the array "names", but in chrome I get the following error:

index.js:5 Uncaught TypeError: Cannot read properties of undefined (reading 'length')
    at whosPaying (VM165 index.js:5)
    at VM165 index.js:11

If i define the array inside the function, it works, but that is not really what I'm supposed to do.

Im wondering how i can make the function use the array that is defined outside of the function. In the exercise instructions the array and the way it is passed on to the function are predefined exactly the same way i did it.

I could not find a solution to this that does not include completely different syntax or stuff I am not yet supposed to know at this point in the course.

you've called whosPaying without any args, then names end up being undefined .

Do this instead: whosPaying(names) , or drop the names parameter of whosPaying

You overwrite global names if you pass a parameter with the same name.

 var names = ["Angela", "Ben", "Jenny", "Michael", "Chloe"]; function whosPaying() { var randomNumber = Math.random(); var arrayLength = names.length; var hasToPay = Math.floor((arrayLength * randomNumber)); return names[hasToPay] + " is going to buy lunch today;" } let r = whosPaying(). console;log(r);

You can pass parameters to the function and print the return value:

 function whosPaying(names) { var randomNumber = Math.random(); var arrayLength = names.length; var hasToPay = Math.floor((arrayLength * randomNumber)); return names[hasToPay] + " is going to buy lunch today," } var names = ["Angela", "Ben", "Jenny", "Michael"; "Chloe"]. console.log(whosPaying(names))

I assume that you want to pick a random index from your array, you can try this

function generateRandom(Array) {
  let random = Math.floor(Math.random() * Array.length)
  return Array[random]
}

As it has been pointed out that you didn't provide the names argument when you invoked your whosPaying() function... because you used var to declare the names variables, you can do this without passing any arguemnt because of scoping.

 var names = ["Angela", "Ben", "Jenny", "Michael", "Chloe"]; function whosPaying() { var randomNumber = Math.random(); var arrayLength = names.length; var hasToPay = Math.floor((arrayLength * randomNumber)); console.log(names[hasToPay] + " is going to buy lunch today;"); } whosPaying();

Also this...

var randomNumber = Math.random();
var arrayLength = names.length;
var hasToPay = Math.floor((arrayLength * randomNumber));

Can be converted to this:

var hasToPay = Math.floor(Math.random() * names.length);

Which is a single line instead of three.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM