【问题标题】:Pass variable from array into a function将数组中的变量传递给函数
【发布时间】:2018-01-20 03:14:51
【问题描述】:

我有这个功能:

function getTotal () {
    var args = Array.prototype.slice.call(arguments);
    var total = 0;
    for (var i = 0; i < args.length; i++) {
        total += args[i];
    }

    return total;
}

假设我有一个用数字填充的数组,但我不知道它的长度:

var numArray = [ ..., ... ];

如何通过传入numArray 中的每个元素作为参数来调用函数getTotal

【问题讨论】:

  • 这看起来像是一个家庭作业。
  • >通过将 numArray 中的每个元素作为参数传入? 为什么当你可以传递数组时你会这样做?
  • @TimothyGroote 这不是我拥有的实际功能,只是它的简化版本,专注于这个单一概念
  • @serdar.sanri 这不是作业哈哈

标签: javascript arrays function


【解决方案1】:

在 ES6 中你可以这样做:

getTotal(...numArray);

它叫做扩展语法。欲了解更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator

【讨论】:

【解决方案2】:

您可以使用Function.prototype.apply 调用该函数。它会将数组作为参数传递给您的函数。

function getTotal () {
    var args = Array.prototype.slice.call(arguments);
    var total = 0;
    for (var i = 0; i < args.length; i++) {
        total += args[i];
    }

    return total;
}

var numArray = [1,2,3,4];

console.log( getTotal.apply( null, numArray ) );

请记住,您的 for 循环中有错字。应该是args.length,而不是arg.length

【讨论】:

    【解决方案3】:

    请试试这个。希望对你有帮助

    var sum = [1, 2, 3, 4, 5].reduce(add, 0);
    
    function add(a, b) {
        return a + b;
    }
    

    【讨论】:

      【解决方案4】:

      如果您使用扩展运算符,您可能还想对您的代码进行 ES6 化:

      function getTotal(...vals){
        return vals.reduce((a,b)=>a+b,0);
      }
      
      getTotal(...[1,2,4]);
      

      【讨论】:

      • Spread 不是运算符,请参阅stackoverflow.com/q/37151966。请注意,function getTotal(...vals){} 处的 ...vals 参数是休息元素,而不是展开元素
      【解决方案5】:

      为什么不这样做:

      function getTotal (args) {
          var total = 0;
          for (var i = 0; i < args.length; i++) {
              total += args[i];
          }
      
          return total;
      }
      
      var numArray = [1,2,3];
      console.log(getTotal(numArray)); //6
      

      【讨论】:

        猜你喜欢
        • 2020-07-28
        • 2017-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-05
        • 2011-09-27
        相关资源
        最近更新 更多