Имеет ли jQuery изменяемую структуру данных типа хэш-таблицы?

#jquery #data-structures

#jquery #структуры данных

Вопрос:

Псевдокод, вероятно, лучший способ показать, что я хочу сделать в jQuery:

 $(selector).each(function() {
    // pull data from LI tags or whatever, store in variables (imgURL, tagline, summary)
    $someDataStructure.add({imgURL, tagline, summary});
});
  

Тогда позже… ссылка на структуру

  $someDataStructure.each(function() {
     var x = $someDataStructure['imgURL'];
     // etc.
 });
  

Есть предложения о том, как я мог бы это сделать?

Ответ №1:

jQuery — это просто JavaScript, а в JavaScript есть объекты. Вы можете использовать объекты JS аналогично карте C или словарю C #. Например, вы можете создать массив объектов и иметь индексы, которым вы можете присвоить имена:

 var liTags = [];

$(selector).each(function() {
   // pull data from LI tags or whatever
   //store in variables (imgURL, tagline, summary)
   liTags.push({'imgURL': imgURL, 'tagline': tagline, 'summary': summary});
});
  

Тогда позже:

 for(int i = 0; i < liTags.length;   i) {
   var imgURL = liTags[i]['imgURL']; //or liTags[i].imgURL;
}
  

Комментарии:

1. @Chad Технически, это просто ассоциативные массивы JavaScript, а не JSON, верно? 🙂

2. Технически говоря, JSON (объектная нотация JavaScript) — это автономный формат, который получен из (и почти идентичен) собственного синтаксиса объявления объектов Javascript.

3. О, и на самом деле это называется объектом. «Ассоциативный массив» — это разговорный термин, основанный на сравнении с некоторыми другими языками.

4. ну, на самом деле это был бы json "imgURL": "somestring" ; вы ДОЛЖНЫ использовать двойные кавычки, и вы НЕ МОЖЕТЕ поместить переменную в JSON — она статична

5. Редактировать: Изменен исходный пост, чтобы, надеюсь, быть более семантически корректным

Ответ №2:

На самом деле вы можете присоединить данные к элементу jquery, используя data api

Итак, сделайте что-нибудь в строках:

 $(selector).each(function() {
    /* I suppose here you have three available variables named:
       imgURL, tagline, summary
        that you got from the element itself or from somewhere else
     */
    $(this).data({imgURL: imgURL, tagline: tagline, summary:summary })
    /* you could also write it {'imgURL': imgURL, etc. } if it looks clearer: the first is the hashtable key, the second a variable containing the value */
}
  

а затем просто извлеките ее из каждого элемента jquery!

 $(selector).data()
  

или

 $(selector).data('imgURL')
  

Это для прикрепления «хэш-таблицы» к элементу.

В javascript у вас есть «ассоциативные массивы» (хэш-таблицы).

Вы можете записать их как: myarray = {key:'value'}

и вы можете получить к ним доступ как:

myarray['attribute'] или myarray.attribute как вы предпочитаете

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

Комментарии:

1. $.data () — это круто, но я не вижу никакого способа «вставить» в нее объекты. Я перебираю кучу DIVS и извлекаю данные, мне нужен какой-то способ продолжать добавлять элементы в список / массив.

2. @CaptSaltyJack: {imgURL, tagline, summary} я полагаю, это псевдокод? пожалуйста, проверьте мою правку и дайте мне знать, если это то, что вы имеете в виду…

3. О, я понимаю, вы прикрепляете данные к каждому элементу в цикле, так что в некотором смысле это своего рода перенос в стек. Понял. Хм .. к сожалению, это все еще не совсем подходит для того, что мне нужно, потому что я вполне мог бы уничтожить селекторы, как только я собрал из них данные. Я не уверен, что $.data () — это то, что мне действительно нужно в этом случае.