ES6:如果rest参数是一个数组,会发生什么?

pQu*_*123 1 javascript ecmascript-6

如果我有:

function foo(number, ...args) {
   //foo to add args to sum
}
Run Code Online (Sandbox Code Playgroud)

我希望调用者可以调用foo,如:

foo(10, 1, 2, 3); // 16
Run Code Online (Sandbox Code Playgroud)

要么:

foo(10, [1, 2, 3]); //16
Run Code Online (Sandbox Code Playgroud)

问题是如何实现这一点.我可以这样做:

function foo(number, ...args) {
    let toAddArr = Array.isArray(args[0]) ? args[0] : args;
    for (let toAdd of toAddArr) {
        number = number + toAdd;
    }
    return number;
}
Run Code Online (Sandbox Code Playgroud)

Sha*_*oor 5

你可以使用一些递归:

function foo(...args) {
    var sum = 0;
    args.forEach((arg) => {
        if (!Array.isArray(arg))
            sum += arg
        else
            sum += foo(...arg); // if it's an array, destructure
    });
    return sum;
}
Run Code Online (Sandbox Code Playgroud)

使用该代码,您甚至可以在数组内传递数组,如果您愿意:)

编辑,for循环:

function foo(...args) {
    var sum = 0;
    for (var arg of args) {
        if (!Array.isArray(arg))
            sum += arg
        else
            sum += foo(...arg); // if it's an array, destructure
    };
    return sum;
}
Run Code Online (Sandbox Code Playgroud)