Добавляет ли этот код атрибуты класса в массив foo?

0

Ниже приведен фрагмент рабочего кода. "= Истинная" часть меня сбивает с толку. Это то, что я думаю, происходит.

1- создать пустой массив.
2- принимают выбранные элементы (цели) списка и цикл.
3-, если атрибуты класса для целевого элемента списка не находятся в массиве, тогда введите if block.
4- добавить атрибуты класса для элемента списка целей и добавить их в массив.

Я понимаю, что javascript использует "push", а jquery использует "add" для вставки элементов в массив. В приведенном ниже коде не используется push или add.

var foo = [];
$($targets).each(function(i) {
    if (!foo[$(this).attr('class')]) {
        foo[$(this).attr('class')] = true;
    }
});
  • 0
    что вы получаете, когда вы console.log (foo); ...?
  • 0
    Теперь я понимаю. Foo ['нечто'] = правда; синтаксис смутил меня. Теперь я вижу, что это пара ключ-значение, как описано здесь stackoverflow.com/questions/1168807/…
Теги:

2 ответа

2
Лучший ответ

Код испорчен, вы должны использовать объект вместо массива, если вы хотите использовать строки как ключи:

var foo = {};

Затем он проверяет, является ли ключ ложным в объекте, хотя вы можете захотеть проверить строгое существование с оператором in:

$targets.each(function() {
  var klass = this.className; // cache, no need for jQuery
  // if 'foo' doesn't have the key 'klass' then add it
  if (! (klass in foo)) foo[klass] = true;
});
1

Если имена классов не такие, как "1" или "2", вы не можете обращаться к элементам внутри массива таким образом. Тем не менее, массивы построены из объектов. Например, вы можете делать такие вещи:

var foo = ['a', 'b', 'c'];
foo.bar = 'hello';

foo;
//=> ['a', 'b', 'c']

foo[0];
//=> 'a';

foo['bar'];
//=> 'hello';

Итак, что происходит, так это то, что ваш скрипт не добавляет эти элементы в фактический массив. Вместо этого он присваивает их массиву, как если бы он был обычным объектом JavaScript.

  • 0
    хаха похожий вопрос и вы тоже создаете на нем свойства ...
  • 0
    хаха ты прав. Следует отметить, что обычно это неправильный способ использования массива. Если вы не собираетесь заполнять его заказанными предметами, лучше использовать объект.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню