如何从$ .each(...)返回一个值?

时间:2013-06-21 00:15:10

标签: jquery arrays scope each

为了拦截数以万计的亲密选票,我可以强调它与this thread无关,更不用说回答了。{/ em>

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

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

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

3 个答案:

答案 0 :(得分: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 :(得分: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/

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

答案 2 :(得分:2)

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

如果你真的必须这样做,请将它包装在如下函数中:

$.each()