如何通过rest参数映射?

kev*_*vin 5 javascript

我试图通过rest参数进行映射.

MDN说:rest参数语法允许我们将无限数量的参数表示为数组.

所以如果...numbers是一个数组,当我在它上面使用map时,即numbers.map()它所映射的数组是[33,44,55].我现在如何映射...numbers数组的每个元素?我无法进入,numbers.map(numbers.slice(numbers.length - 1))因为每个numbers都是总数组.

TLDR; 我想简单地说,我如何映射其余参数的每个元素?

我没有想法.

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);
Run Code Online (Sandbox Code Playgroud)

Cer*_*nce 4

它只是一个数组,因此您可以像迭代任何数组一样迭代它。

当前代码存在几个问题:在将回调函数传递给 时不要调用.map回调函数,而只需传递该函数:

digitsArr = numbers.map(collectLastDigit);
Run Code Online (Sandbox Code Playgroud)

另外,数字没有slice方法,因此this.slice不起作用 - 如果您愿意slice,请先强制转换为字符串。您也可以使用slice(-1)而不是传递length - 1. 另外, this不会引用正在迭代的项目 - 相反,使用回调的第一个参数:

digitsArr = numbers.map(collectLastDigit);
Run Code Online (Sandbox Code Playgroud)

如果您想要一个数字数组而不是字符串数组作为结果,请更改collectLastDigit为强制回数字:

const collectLastDigit = num => Number(String(num).slice(-1));
Run Code Online (Sandbox Code Playgroud)

如果您愿意,您也可以使用剩余参数checkLastDigit,而不是只需要 3 个参数:

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));
Run Code Online (Sandbox Code Playgroud)