【问题标题】:Create a function that will convert a parameter to array创建一个将参数转换为数组的函数
【发布时间】:2023-04-08 04:18:02
【问题描述】:

我需要创建一个函数,它将整数的函数参数解析为数组列表。

所以如果我们这样调用函数:sum(1, 4 ,7); 然后在函数“sum”内部,参数变量/关键字将如下所示[1, 4, 7]。 我需要创建一个 sum 函数,以便它可以接受任意数量的参数并返回所有参数的总和。

到目前为止,这是我的代码:

function sum ([a,b]) {
var arr = [a,b];
var sum =arr.reduce(add, 0);

function add(a, b) {
return a + b;
}
}

我也尝试过这样的事情:

function sum ({
  arr[0]: 1;
  arr[1]: 2;
  arr[2]:3;

  var sum =arr.reduce(add, 0);

function add(a, b) {
return a + b;
}
})

但我显然做错了什么。

【问题讨论】:

    标签: javascript arrays function parameters


    【解决方案1】:

    试试这个

    function sun () {
      return Array.prototype.reduce.call(arguments, function(pre, cur) {
        return pre + cur
      }, 0)
    }
    

    这是你的需要。

    【讨论】:

    • 说明你做了什么。仅代码答案没有用。另外,你有错别字。此外,您已经将“添加”添加到此函数中,这不是 OP 所要求的。
    • 谢谢,但这里的“pre”和“cur”是什么?只是数组的一个元素?
    • @AliceJarmusch 这是Array.prototype.reduce developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 的两个参数
    • @cale_b 我​​的错误@AliceJarmusch 你想积累函数sum 的参数,但你不知道参数的数量。通过函数中的arguments,可以得到像Array这样的所有参数,但这不是Array。所以你应该使用.call对其执行reduce
    • @AliceJarmusch 在 ES6 中,您不应该在数组中使用 arguments,而应该使用 ...args 运算符获取所有参数。您可以在 babel 中尝试@Tresdin 回答。
    【解决方案2】:

    只是为了将arguments 更改为类似对象的数组,您可以使用Array.apply

    阅读更多:

    function x() {
        return Array.apply(Array, arguments);
    }
    
    var array = x(1, 4, 7);
    
    console.log(array);
    console.log(typeof array);
    console.log(Array.isArray(array));

    【讨论】:

      【解决方案3】:
      var sum =function() {
          var args = [];
          args.push.apply(args, arguments);
          return args.reduce((a,b) => { return a+b}, 0); // ES6 arrow function
      }
      sum(1,2,3); // return 6
      

      【讨论】:

      • 请详细说明这段代码是如何回答这个问题的。
      【解决方案4】:

      试试这个 ES6 解决方案。

      let sum = (...args) => args.reduce((a, b) => a + b, 0);
      

      更多详情可以查看rest parameters的MDN文章。它主要用于检索数组中的参数列表。

      【讨论】:

      • 这不是和我想做的一样吗?据我了解,这里唯一的问题是将 args 转换为列表,并将 .reduce() 应用于它。而且我真的不知道我能用它做什么。
      • @AliceJarmusch 您不需要将arguments 转换为数组的函数。休息参数是为此任务设计的。
      猜你喜欢
      • 2016-01-23
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2013-02-04
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多