2013-06-21 31 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

不知道這個函數,我得感謝你學習了一些東西! –