JQuery - как выбрать идентификатор и последний элемент самого длинного из четырех массивов? - PullRequest
0 голосов
/ 19 октября 2011

У меня есть четыре элемента DIV на моей странице. У каждого есть свой массив, который я прикрепил с помощью data ().

В зависимости от взаимодействия с пользователем (при навигации по страницам) jquery сохраняет идентификаторы загруженных элементов в одном из массивов.

Элементы настройки и нажатия работают и выглядят так:

$('div:jqmData(role="panel")').each(function(index) {
    if ( $(this).jqmData('hash') == 'history' ) {
         var id = $(this).jqmData('id');
         $(this).data("stack", []);
         // inital entry = startpage
         $(this).data("stack").push('#'+$(this).find('.starter').attr('id')); 
         }
}); 

Добавление элементов:

$('div:jqmData(role="page")').bind( "pagechange", function( event) {
      var $targetPanel = $( event.target ),                 
      $targetPage = '#'+ $.mobile.path.stripHash( hash );   
      $targetPanel.data("stack").push($targetPage);
      });

Теперь мне нужно знать, какой массив самый длинный и какой была последняя запись?

Понятия не имею, как это сделать ...

Невозможно использовать maxValue или math, поскольку у меня есть только записи, такие как #pageSome, #pageOther. Должен быть лучший способ, чем перебирать все массивы, вычислять их длину и пытаться получить наибольшее значение, если-либо ...

Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 19 октября 2011

Вы можете использовать метод сортировки, чтобы найти самый длинный массив

var arr = [];
arr.push([1,2,3,4,5,6]);
arr.push([1,2,3,4,5,7,8]);
arr.push([1,2,3,4,5]);
arr.sort(function(a,b){return b.length - a.length});
// arr is now sorted with [0]  being the longest array

Затем, чтобы отсортировать эти массивы, вы можете получить их с помощью функции, подобной следующей:

$('div:jqmData(role="panel"),div:jqmData(role="page")').each(function(index) {
    arr.push($(this).data("stack"));
});

или если данные в массивах изменяются не часто, вы можете вставить массивы, поскольку они встроены в две функции, указанные в вопросе.

EDIT в соответствии споследняя информация через комментарии

Затем, когда вы захотите сослаться на самый длинный массив и использовать его как селектор jQuery, вы можете использовать следующий код:

var longest = arr[0].join(",") // arr was sorted to have the first index contain the longest array
$(longest).hide();
0 голосов
/ 19 октября 2011
var longestArrayStack = function() {
    var l = Array.prototype.sort.call(arguments, function(a, b) {
        return b.length - a.length;
    });
    return l[0];
});

Тогда:

var arr = [];
$('div:jqmData(role="page")').each(function(){
    arr.push( $(this).data("stack") );
});
var longestArr = longestArrayStack(arr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...