我正在尝试通过rest参数进行映射。
MDN说: rest参数语法使我们可以将不确定数量的参数表示为数组。
因此,如果...numbers
是一个数组,那么当我在其上使用map即numbers.map()
时,它映射的数组就是[33,44,55]
。现在如何映射...numbers
数组的每个元素?我无法输入numbers.map(numbers.slice(numbers.length - 1))
,因为每个numbers
是总数组。
TLDR;我想简单地说,如何映射rest参数的每个元素?
我没主意了。
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);
答案 0 :(得分:4)
这只是一个数组,所以您可以像遍历任何数组一样遍历它。
您当前的代码有几个问题:在将回调函数逐渐淡化到.map
时,不要调用回调函数,而只需 pass 该函数:>
digitsArr = numbers.map(collectLastDigit);
此外,数字没有slice
方法,因此this.slice
将不起作用-如果要slice
,请先将其强制为字符串。您也可以使用slice(-1)
而不是传递length - 1
。另外,this
不会引用被迭代的项目-而是使用回调的第一个参数:
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));
如果要作为结果的数字数组而不是字符串的数组,请更改collectLastDigit
以强制返回数字:
const collectLastDigit = num => Number(String(num).slice(-1));
如果需要,您也可以在checkLastDigit
中使用rest参数,而不是只需要3个参数:
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));