Проверьте объект в массиве для data-attr и верните true / false, если оператор JS - PullRequest
1 голос
/ 07 января 2020

У меня есть массив объектов, и я хочу проверить, есть ли у одного из них data-attr, чтобы я мог сделать простое утверждение if, вот пример того, что я пытаюсь сделать

if (array.hasAttribute("data-attr")) {}

Я пробовал некоторые () и каждый ()

if (array.some(this.hasAttribute("data-attr"))) {}

, но я не могу понять правильный синтаксис, пожалуйста, помогите

1 Ответ

3 голосов
/ 07 января 2020
array.some(this.hasAttribute("data-attr"))

Было почти правильно. Array#some принимает предикат , поэтому вам нужно сделать

array.some(function(el) { 
  return el.hasAttribute("data-attr");
})

или короче, используя функции стрелок:

array.some(el => el.hasAttribute("data-attr"))

Array#every работает так же и принимает предикат, поэтому вы можете назвать его так же:

array.every(function(el) { 
  return el.hasAttribute("data-attr");
})
//or
array.every(el => el.hasAttribute("data-attr"))

И если вы хотите использовать один или другой, вы можете извлечь предикат и используйте его снова:

var hasDataAttribute = el => el.hasAttribute("data-attr")

array.some(hasDataAttribute)
array.every(hasDataAttribute)

Если у вас есть jQuery объекты, вы должны использовать некоторые приемы , так как jQuery не имеет метода, который возвращает true или false для атрибутов существования. Вы можете легко смоделировать его с помощью obj.attr('some-attribute') !== undefined - это вернет true, если some-attribute существует, и false, если его нет.

var hasDataAttribute = jQueryEl => jQueryEl.attr('data-attr') !== undefined

Для атрибутов data-* вы также можете использовать jQuery.data(), что (в данном случае) сокращение element.attr('data-something') такое же, как element.data('something'):

var hasDataAttribute = jQueryEl => jQueryEl.data('attr') !== undefined
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...