2010-07-19 3 views
1

Я хочу объединить рекурсивно массивы ..конкатенация Массив Рекурсивный

Мой код:

var allitemorder; 
var itemorder; 

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

Пожалуйста, помогите.

+1

Что такое 'sortable'? что такое «слияние»? – SilentGhost

+0

@SilentGhost: sortable сделать список в перетаскиваемый список (http://docs.jquery.com/UI/Sortable для примеров) merge (arr1, arr2) объединяет arr2 за arr1. (http://api.jquery.com/jQuery.merge/) – Deefjuh

ответ

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

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

Похоже, вы сбрасываете allitemorder с помощью itemorder. Так не должно ли это быть:

allitemorder = $.merge(allitemorder, itemorder); 

EDIT: , как утверждает Ник: $.merge(allitemorder, itemorder); суффиксов (без повторной установки переменной allitemorder). Я бы полностью согласился с его сокращенным решением.

2

Попробуйте это:

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

Возвращение массива в .map() автоматически объединяет массив в объект JQuery создан. Затем .get() извлекает окончательный массив.

+0

Это вернет массив массивов;) –

+0

@Nick - я уверен, что когда '.map()' получает и массив, он автоматически объединяет его в массив объектов jQuery. В одном случае, когда я на самом деле * хотел * массив массивов, я обнаружил, что у меня получился только один массив. – user113716

+0

Вы правы, это ошибка в основной ИМО, она не должна делать concat, это неправильная обработка возвращенных массивов. Я никогда не пробовал это, но это определенно не ожидаемый результат. +1 для этого, хотя я на самом деле * надеюсь * он ломается в будущей версии, без обид :) –

Смежные вопросы