【问题标题】:javascript function returning issuejavascript函数返回问题
【发布时间】:2013-07-11 19:51:22
【问题描述】:

我想返回所有元素的 var "source" 值,现在当我将 "source" 从每个函数中取出时,它变得未定义。我想返回整个源数组。怎么做?任何帮助将不胜感激 -

function _getSource(){
    var product = fpd.getProduct(true);

    $(product[0].elements).each(function(i, elem) {
        var source = elem.parameters['source'];
    })

    return source;
    alert (source);
}

【问题讨论】:

    标签: javascript function


    【解决方案1】:

    假设您实际上是在一个 array 之后,其中包含每个元素的 source 属性:

    function _getSource(){
        var product = fpd.getProduct(true);
    
        return $(product[0].elements).map(function(i, elem) {
            return elem.parameters['source'];
        }).get();    // .get() turns jQuery collection into an array
    }
    

    .map.each / push 组合的一个很好的替代品。它来自函数式语言,其中“map”函数只接受一个数组,转换每个元素,然后返回一个包含这些转换结果的新数组。

    如果您不介意返回类似数组的结果而不是正确的数组,则最后的.get 不是绝对必要的。

    【讨论】:

      【解决方案2】:

      当您编写var source 时,您声明了一个新变量,其作用域为each 回调函数。在外面声明它并去掉var,所以你只是分配而不是重新声明,你可能还想建立一个数组而不仅仅是分配。像这样的:

      function _getSource(){
          var product = fpd.getProduct(true);
          var sources = [];
      
          $(product[0].elements).each(function() {
              sources.push(elem.parameters['source']);
          })
      
          return sources;
      }
      

      【讨论】:

      • 他没有“外部源变量”。为什么不使用.map - 它就是为此而设计的。
      • @Alnitak 谢谢,假设有外部来源。我同意使用each 循环并调用push 不如map 优雅,但由于OP 是公认的初学者,因此采取小步骤可能会更好
      【解决方案3】:

      source 仅在 each 函数内定义,因为您在其中 var'd 它。

      试试这个:

      function _getSource() {
          return $(fpd.getProduct(true)[0].elements).map(function() {return this.parameters['source'];});
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-02
        • 2016-01-08
        相关资源
        最近更新 更多