ES6:如果其余参数是数组,会发生什么? [英] ES6: What happens if the rest parameter is an array?

查看:105
本文介绍了ES6:如果其余参数是数组,会发生什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有:

function foo(number, ...args) {
   //foo to add args to sum
}

我想要一个调用者能够调用foo :

and I want a caller to be able to call foo like:

foo(10, 1, 2, 3); // 16

或:

foo(10, [1, 2, 3]); //16

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

The question is how to implement this. Can I do this:

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


推荐答案

您可以使用一些递归:

You could use some recursion:

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;
}

使用该代码,您甚至可以在数组内的数组内传递数组:

With that code, you can even pass arrays inside arrays inside arrays if you want :)

编辑,循环:

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;
}

这篇关于ES6:如果其余参数是数组,会发生什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆