2013-06-21 50 views
1

为了拦截一大笔近票,我可以强调它与this thread无关,更不用说了。

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

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

现在,如上面的例子示出了,我依靠预声明输出我写从每个范围的子水平。有用。但是,我不能停止感觉这不是最好的方法。我想返回一些内容,而不是将其附加到半全局输出

+1

你不能从$ .each中返回一些东西,你正在做的事情几乎是你必须这样做的。唯一的选择是用每个内部的值执行一个函数。 –

+0

@KevinB党...谢谢。没有改进的余地。我想我的代码是完美的。 :D –

+0

使用'for'循环和'for..in' :) – sabithpocker

回答

4

.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/

但personnaly,我更喜欢你做的方式:用varible。

+0

实际上本地的'.map()'方法也可以在这里使用 – zerkms

2

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

如果你真的真的要做到这一点它包装在一个函数像这样:

function myFunction(){ 
    var output = ''; 
    $.each(something,function(){ 
     output += 'some text' 
    }) 
    return output; 
} 
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/

+1

不知道这个函数,我得感谢你学习了一些东西! –