1

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

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

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

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

4

3 回答 3

4

如果您想使用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/

于 2013-06-21T00:28:08.520 回答
4

return 语句中的.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/

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

于 2013-06-21T00:30:56.803 回答
2

您不能从中返回值$.each(),如果您返回 true(或任何非 false)continue,则表示如果您返回 false,则表示break- 发生这种情况是因为$.each()只是循环并运行您的匿名函数(该return语句在您的匿名函数中运行,这$.each()就是被编程来处理返回的值)。

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

function myFunction(){
    var output = '';
    $.each(something,function(){
        output += 'some text'
    })
    return output;
}
于 2013-06-21T00:20:33.760 回答