Допустим, у меня есть это:
var blockedTile = new Array("118", "67", "190", "43", "135", "520");
Там больше элементов массива, но их мало для удобства чтения. В любом случае, я мог бы сделать цикл for, но он делал бы 500 циклов каждый раз, когда вы нажимаете на карту ... Есть ли другой способ проверить, есть ли определенная строка в массиве?
javascript
тест
источник
источник
if(!!~blockedTile.indexOf('118))
этот метод всегда будет возвращать истину, если результат> -1, и ложь, если результат === -1indexOf()
может также применяться к буквенным массивам, напримерif (-1 == [84, 116].indexOf(event.keyCode))
. Протестировано на Chrome 37.0.2062.122.indexOf(…) >= 0
. не имеет значения, и я забываю, где я взял это как привычкуКак упоминалось ранее, если ваш браузер поддерживает
indexOf()
, отлично! Если нет, вам нужно его запилить или использовать вспомогательный пояс, например, lodash / underscore .Просто хотел добавить это более новое дополнение ES2016 (чтобы держать этот вопрос обновленным):
Array.prototype.includes ()
источник
источник
Используйте Underscore.js
Он совместим с различными браузерами и может выполнять бинарный поиск, если ваши данные отсортированы.
_.индекс
пример
источник
Некоторые браузеры поддерживают
Array.indexOf()
.Если нет, вы можете дополнить
Array
объект с помощью его прототипа следующим образом ...Источник .
источник
Просто используйте на свой вкус:
источник
Лучший способ сделать это в 2019 году с помощью
.includes()
Первый параметр - это то, что вы ищете. Второй параметр - это позиция индекса в этом массиве, с которой начинается поиск.
Если вам нужно быть раздражительным здесь - есть много унаследованных ответов.
источник
includes
Решение дублируется в Kutyel (2016), Сергей Савельев (2017) и Krunal Limbad (2018) ответы с такими же подробными примерами и ссылками ...источник
Уже ответил выше, но хотел бы поделиться.
Здесь есть какая-то ссылка . у них также есть Polyfill для выше.
источник
Array.includes()
представлен в ES7 (ECMAScript 2017) и не будет работать со старыми браузерами. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…В зависимости от имеющейся версии JavaScript вы можете использовать
indexOf
:Или
some
:Но, если вы делаете такого рода проверки существования, вам лучше использовать Object для хранения ваших строк (или, возможно, как объекта, так и массива в зависимости от того, что вы делаете с вашими данными).
источник
Я бы использовал другую структуру данных, так как массив кажется не лучшим решением.
Вместо массива используйте объект в качестве хеш-таблицы, например так:
(опубликовано также в jsbin )
Консольный вывод:
Это простое решение. Если вам больше нравится объектно-ориентированный подход, то поищите в Google «js hashtable» .
источник
ИМХО больше всего совместимо со старыми браузерами
Превратив копию массива в строку CSV, вы можете проверить строку в старых браузерах.
источник
['Lemon Pie'].inArray('Lemon')
вернетсяTrue
. Вы можете обернуть иглу,,
чтобы обойти ее, или использовать сопоставление с регулярным выражением, чтобы сделать то же самое, но объединение было бы предпочтительнее, используя что-то более неясное, чем,
по аналогичным ложноположительным причинам (|
скажем). Это зависит от набора данныхПочему вы не используете Array.filter?
Просто скопируйте это в свой код, и здесь вы идете:
источник
в примере массива, то же самое в php (in_array)
источник
источник
includes
. Как этот ответ дает какие-либо дополнительные значения по сравнению с ними?Вы можете попробовать ниже код. Проверьте http://api.jquery.com/jquery.grep/
проверьте arr.length, если оно больше 0, означает, что строка присутствует, иначе ее нет.
источник
Я думаю, что самый простой способ заключается в следующем:
источник