I am attempting to map through a rest parameter.
MDN says: The rest parameter syntax allows us to represent an indefinite number of arguments as an array.
So if ...numbers
is an array, when I use map on it ie numbers.map()
, the array it's mapping is [33,44,55]
. How can I now map each element of the ...numbers
array? I can't enter numbers.map(numbers.slice(numbers.length - 1))
because each numbers
is the total array.
TLDR; I guess to put it simply, how can I map each element of the rest parameter?
I'm out of ideas.
function checkLastDigit(num1, num2, num3) {
function collectDigits(...numbers) {
let digitsArr = [];
digitsArr = numbers.map(collectLastDigit());
return digitsArr;
}
function collectLastDigit() {
return this.slice(this.length - 1)
}
return collectDigits(num1, num2, num3);
}
checkLastDigit(33, 44, 55);
It's just an array, so you can iterate through it just the way you would iterate through any array.
A couple problems with your current code: don't invoke the callback function while paassing it to .map
, instead just pass the function:
digitsArr = numbers.map(collectLastDigit);
Also, numbers do not have a slice
method , so this.slice
won't work - if you want to slice
, coerce to a string first. You may also use slice(-1)
rather than passing the length - 1
. Also, this
won't refer to the item being iterated over - instead, use the first parameter of the callback instead:
function checkLastDigit(num1, num2, num3) {
const collectLastDigit = num => String(num).slice(-1);
const collectDigits = (...numbers) => numbers.map(collectLastDigit);
return collectDigits(num1, num2, num3);
}
console.log(checkLastDigit(33, 44, 55));
If you want an array of numbers as a result rather than an array of strings, then change collectLastDigit
to coerce back to a number:
const collectLastDigit = num => Number(String(num).slice(-1));
You could also use rest parameters in checkLastDigit
too, if you wanted, rather than requiring exactly 3 arguments:
function checkLastDigit(...nums) {
const collectLastDigit = num => String(num).slice(-1);
const collectDigits = (...numbers) => numbers.map(collectLastDigit);
return collectDigits.apply(undefined, nums);
}
console.log(checkLastDigit(33, 44, 55));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With