Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как по проще, зная элемент, определить его номер в массиве?

Александр Глухов Знаток (312), закрыт 7 лет назад
Допустим, в слайдере все его изображения хранятся в некотором массиве arr. Демонстрируется arr[i] изображение. Получить предыдущее/следующее можно arr[--i] / arr[++i]. Но где то на страничке демонстрируется набор уменьшенных слайдов, кликнув на любой, мы его увидим. Так как, скажем, при клике на img_chosen.jpg мы узнаем его i-й номер в массиве? Есть, конечно, перебор со всякими пузырьковыми сортировками, функции для проверки, выше/ниже объект находится в иерархии DOM, но неужели нет чего попроще?
Еще раз:
Легко:
arr[i] => значение
Как имея "значение", попроще выяснить его i ?
Дополнен 7 лет назад
Разумеется, можно тупо записать каждому элементу его номер в соответствующий атрибут. Но некоторые валидаторы при виде нестандартного атрибута начинают верещать
Дополнен 7 лет назад
Кажется, вариант для некоторых случаев (для DOM -элементов) нашел. Если каждому элементу присвоить номер в атрибуте data-имя_аттриб, то валидацию вроде пройдет. Т. е. data-position = 1, data-position = 2... Причем везде кроме 10-Ослика и ниже можно обратиться к таким атрибутам по свойству: элемент. dataset.имя_аттриб
i = imgChosen.dataset.position
Лучший ответ
AlexBrin Мыслитель (5035) 7 лет назад
Сразу видно, что два предыдущих ответа от тех, кто не знает языка

array.indexOf('значение')
Вернет ключ, если элемент найден (от 0 и больше)
Если значения нет, то вернет -1
Важно: indexOf проводит строгое сравнивание (то есть ===)
МаксимИскусственный Интеллект (210749) 7 лет назад
Да что вы говорите.. про indexOf не знают. Ты вопрос вообще читал? Ты предложил линейный перебор.
Александр ГлуховЗнаток (312) 7 лет назад
Спасибо большое! Но он вроде медленный, нет?
Остальные ответы
Иван Сигаев Искусственный Интеллект (153588) 7 лет назад
Для массива только перебор
Александр ГлуховЗнаток (312) 7 лет назад
Да, но это подразумевает поиск. А тут есть преимущество - точно известно, что элемент там есть
Иван Сигаев Искусственный Интеллект (153588) А какая разница, я точно знаю что этот вопрос есть на "ответах", но чтобы его найти нужен или номер или поиском/перебором
Максим Искусственный Интеллект (210749) 7 лет назад
Ассоциативный массив используй, помещай данные не по индексу, а по имени, например.
Андрей Высший разум (454480) 7 лет назад
А зачем использовать нестандартные атрибуты? Для этих целей существует специальный тип произвольных пользовательских атрибутов, имеющих префикс "data-". Так что можешь написать data-id="3" или data-number="17" - и это будет полностью соответствовать стандарту HTML. И для работы с data-атрибутами в JavaScript есть специальный набор методов.

Подробности: https://webref.ru/html/attr/data
Александр ГлуховЗнаток (312) 7 лет назад
Так я же об этом в конце написал
Похожие вопросы