【问题标题】:How to return a value from $.each(...)?如何从 $.each(...) 返回一个值?
【发布时间】:2013-06-18 00:45:19
【问题描述】:

为了拦截大量的近距离投票,我可以强调它与this thread 无关,更不用说回答了。

我不确定如何将 $.each(...) 构造中的值返回到外部作用域。假设我们有一个 JSON 对象数组(或相关的数组)。

var output = "";
$.each(array, function (key1, value1) {
  output += "[" + key1 + "] --> ";
  $.each(value1, function (key2, value2) {
    output += key2 + ":" + value2 + " ";
  });
});
console.log(output);

现在,如上面的示例所示,我依赖于从每个子范围级别写入的预先声明的输出。有用。但是,我不能停止觉得这不是最好的方法。我想返回一些东西,而不是将其附加到半全局输出

【问题讨论】:

  • 你不能从 $.each 中返回一些东西,你所做的几乎就是你必须这样做的方式。唯一的选择是使用 each 内部的值执行一个函数。
  • @KevinB Dang...谢谢。没有改进的余地。我想我的代码是完美的。 :D
  • 使用for循环和for..in :)
  • @sabithpocker 这有什么帮助?我绝对不能从循环中返回任何东西,可以吗?
  • 你绝对可以从 for 循环中返回。但是,在您的情况下,您实际上可以非常有效地使用 $.map。

标签: jquery arrays scope each


【解决方案1】:

你不能从$.each()返回值,如果你返回真(或任何非假)这意味着continue,如果你返回假这意味着break - 这是因为$.each()只是循环并运行你的匿名函数(return 语句在您的匿名函数中运行,这就是 $.each() 被编程为处理返回值的方式)。

如果您真的必须这样做,请将其包装在这样的函数中:

function myFunction(){
    var output = '';
    $.each(something,function(){
        output += 'some text'
    })
    return output;
}

【讨论】:

    【解决方案2】:

    如果您想使用return - 请尝试使用.reduce()

    var output = array.reduce(function(p, value1, key1) {
        var nested = value1.reduce(function(p, value2, key2) {
            return [p, key2, ':', value2, ' '].join('');
        }, '');
    
        return [p, '[', key1, '] --> ', nested].join('');
    }, '');
    console.log(output);
    

    http://jsfiddle.net/c2chJ/

    【讨论】:

    • 不知道那个功能,谢谢你学习!
    【解决方案3】:

    .each() 中的 return 语句返回循环是否继续。要让.each() 返回一个值,您可以像这样使用.map()

    var output = $.map(array, function(v, i){
        return "[" + i + "] --> " + $.map(v, function(v, i){
            return i+ ':' + v + ' ';        
        }).join();
    }).join();
    

    小提琴:http://jsfiddle.net/stEV6/

    但就个人而言,我更喜欢你这样做的方式:使用变量。

    【讨论】:

    • 其实这里也可以使用原生的.map()方法
    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2018-11-23
    • 1970-01-01
    • 2021-03-09
    • 2015-07-12
    • 1970-01-01
    相关资源
    最近更新 更多