Как сделать элемент, содержащий некоторую специальную пару, первым в массиве? - PullRequest
0 голосов
/ 29 января 2012

У меня есть созданный массив JSON с кодом вроде user_images.push({'href' : value.href, 'title' : value.title }); в некотором цикле for_each. Интересно, как сделать элемент, содержащий что-то вроде 'href' : my_href первым в массиве?

Ответы [ 2 ]

2 голосов
/ 29 января 2012

Прокрутите массив, чтобы найти объект с определенным значением, затем удалите его из массива и вставьте как первый:

$.each( user_images, function( index ) {
    if( this.href === my_href ) {
        user_images.unshift( user_images.splice( index, 1 )[0] );
        return false; //stop the loop
    }
});

user_images[0].href должно быть my_href, теперь

2 голосов
/ 29 января 2012

У вас нет «массива JSON», у вас есть массив JavaScript (JSON - это строковое представление данных).

Но в любом случае вы, похоже, говорите, что у вас есть массив user_images, который содержит объекты, каждый из которых имеет свойство href, и вы хотите сделать его таким, чтобы объект с определенным href свойство является первым в массиве. Конкретное значение, которое вы ищете, хранится в переменной с именем my_href. Если я правильно понял, читайте дальше ...

Полагаю, ваш текущий код выглядит примерно так:

var user_images = [];
for (value in someObjectThatYouDoNotShowInYourQuestion)
   user_images.push({'href' : value.href, 'title' : value.title });

Чтобы найти элемент в массиве с href, равным переменной my_href, вы можете просто перебрать массив, пока не найдете этот элемент, а затем использовать .splice() метод для удалите его из текущей позиции и unshift() метод , чтобы добавить его в начало массива:

var item,
    i;
for (i = 0; i < user_images.length; i++) {
   if (user_images[i].href === my_href) {
      item = user_images[i];
      user_images.splice(i,1);
      user_images.unshift(item);
      break;
   }
}

Если соответствующий элемент не найден, массив не изменится.

Примечание: вам на самом деле не нужна переменная item, показанная в моем коде. Я вставил его для удобства чтения, чтобы было очевидно, что вы сохраняете ссылку на искомый объект, затем удаляете его, затем помещаете его в начало массива, но учитывая, что метод .splice() возвращает массив удаленных элементов, которые можно заменить этими тремя строками в цикле for на одну строку:

user_images.unshift(user_images.splice(i,1)[0]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...