добавление элемента в массив в jquery

#jquery #jquery-selectors

#jquery #jquery-селекторы

Вопрос:

Я знаю, что этот код правильный, я его не писал. Я пытаюсь понять, что делает код.

  1. создать переменную
  2. перебор дочерних элементов неупорядоченного списка
  3. установите CssClass = имя класса
  4. если CssClass отсутствует в myarray, добавьте его в myarray

Я знаком с другими способами проверки наличия элемента в массиве и знаком с другими способами добавления элемента в массив, но этот метод меня смущает. Поддерживают ли другие языки этот тип синтаксиса?

     var myarray = [];
    $(".somelist > li").each(function() {
    var cssClass = $(this).attr("class");

    //This part below is CONFUSING
    if(!myarray[cssClass]) {
         myarray[cssClass] = true;
    }
});    
  

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

1. myarray = [] должно быть myarray = {} , если какое-либо из имен классов не является целым числом.

2. Запутанный и глупый бит заключается в том, что myarray это массив, а не объект. Конечно, массивы тоже являются объектами, просто они не используются как массив

3. Эта ссылка может быть полезна другим. javascriptkata.com/2007/03/29/how-to-use-javascript-hashes

4. другая ссылка blog.persistent.info/2004/08/javascript-associative-arrays.html

Ответ №1:

Если хэш / карта не содержит записи для данного класса, добавьте ее.

Он создает коллекцию всех классов, используемых элементами списка в классе somelist.

Ответ №2:

 1 if(!myarray[cssClass]) {
2         myarray[cssClass] = true;
    }
  

Вот краткое описание того, что происходит, myarray переменная используется в качестве хэша —

1 — Проверяет, находится ли текущее имя класса в массиве. myarray[cssClass] вернет «ложное» значение, если имя класса не включено в массив.

2 — Если класса нет в массиве, добавьте его в массив и установите для него значение true

Ответ №3:

В этом случае оно будет false, только если оно впервые встречается в этом массиве. Когда это второй цикл и класс тот же, он не изменит его true снова. Хотя это не имеет смысла. Этот код является синонимом

     var myarray = [];
    $(".somelist > li").each(function() {
    var cssClass = $(this).attr("class");
    myarray[cssClass] = true;
});   
  

Ответ №4:

Если массив не содержит записи с ключом, представленным переменной CssClass, он добавит ее и установит значение этого ключа в true . Если он уже существует, он остается true…so

 if(!myarray[cssClass]))
  

возвращает false, если нет ключа со значением, заданным переменной CssClass.
Я не знаю контекста этого кода, но с этого момента он кажется немного бесполезным.