2010-07-19 68 views
1

我想合併遞歸陣列..串連陣列遞歸

我的代碼是:

var allitemorder; 
var itemorder; 

$('.divclass').each(function() { 
     itemorder = $(this).sortable('toArray'); 
     allitemorder = $.merge([], itemorder); 
}); 

請幫助。

+1

什麼是「可排序」?什麼是「合併」? – SilentGhost 2010-07-19 11:51:37

+0

@SilentGhost: 排序列出清單到拖動列表(http://docs.jquery.com/UI/Sortable的例子) 合併(ARR1,ARR2)合併背後ARR1 ARR2。 (http://api.jquery.com/jQuery.merge/) – Deefjuh 2010-07-19 12:06:08

回答

3

你只需要輕微的變化,這樣的:

var allitemorder = [], itemorder; 

$('.divclass').each(function() { 
    itemorder = $(this).sortable('toArray'); 
    $.merge(allitemorder, itemorder); 
}); 

或者更短:

var allitemorder = [];  
$('.divclass').each(function() { 
    $.merge(allitemorder, $(this).sortable('toArray')); 
}); 

$.merge(first, second)需要從數組中的元素,並將它們在第一 ,所以你需要傳遞你想要積累的數組作爲第一個參數。

+0

我喜歡速記版。 – Deefjuh 2010-07-19 11:57:38

1
allitemorder = $.merge([], itemorder); 

看起來你正在用itemorder重置allitemorder。 所以不應該是這樣:

allitemorder = $.merge(allitemorder, itemorder); 

編輯: 尼克說:$.merge(allitemorder, itemorder); 就足夠了(無需再次設置變量allitemorder)。我會完全用他的速記解決方案。

2

嘗試這種情況:

var array = $('.divclass').map(function() { 
     return $(this).sortable('toArray'); 
}).get(); 

返回的數組中.map()自動合併數組到所創建的jQuery對象。然後.get()檢索最終數組。

+0

這將返回一個數組的數組;) – 2010-07-19 11:56:18

+0

@Nick - 我很肯定的是,當'.MAP()'接收和陣列,它自動將其合併到jQuery對象陣列。有一次我真的想要一個數組,我發現我只有一個數組。 – user113716 2010-07-19 11:58:52

+0

哇,你是對的,這是核心的錯誤海事組織,它不應該做的concat,這是一個處理返回數組的不當明確。我從來沒有嘗試過這個,但這絕對不是預期的結果。 +1爲此,但我實際上*希望*它在未來的版本中打破,沒有進攻:) – 2010-07-19 12:03:11