如何通过rest参数映射?

时间:2019-01-25 01:47:16

标签: javascript

我正在尝试通过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);

1 个答案:

答案 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));