7

Как узнать, содержится ли определенная строка в массиве на JavaScript/jQuery?

5

Как можно проверить, содержится ли слово "specialword" в массиве? Например, у меня есть следующий массив:

categories: [
    "specialword",
    "word1",
    "word2"
]

Какое решение подойдет для этой задачи?

5 ответ(ов)

0

Вот так:

$.inArray('specialword', arr)

Эта функция возвращает положительное целое число (индекс в массиве для данного значения) или -1, если заданное значение не найдено в массиве.

Рабочий пример: http://jsfiddle.net/simevidas/5Gdfc/

Вы, вероятно, хотите использовать это следующим образом:

if ( $.inArray('specialword', arr) > -1 ) {
    // значение есть в массиве
}
0

Вы можете использовать метод includes (встроенная функция JavaScript), который вернет true, если значение найдено, и false, если нет.

Если вам нужен точный индекс, вы можете использовать indexOf (также встроенная функция JavaScript), которая вернет точный индекс, если значение найдено, или -1, если его нет.

Вы также можете заменить .includes на метод .some, который возвращает булево значение. Этот метод завершит выполнение, как только найдет совпадение, что отлично сказывается на производительности при работе с большими массивами.

Обратите внимание: все методы регистрозависимы.

var myarr = ["I", "like", "turtles"];

isVal = myarr.includes('like')
index = myarr.indexOf('like')
some = myarr.some(item => item.toLowerCase() == 'like'.toLowerCase())

console.log(isVal) // true
console.log(index) // 1
console.log(some)  // true

Пожалуйста, проверьте это.

0

Вы можете использовать цикл for, как показано ниже:

var found = false;
for (var i = 0; i < categories.length && !found; i++) {
  if (categories[i] === "specialword") {
    found = true;
    break;
  }
}

В этом примере мы проходим по массиву categories и проверяем, есть ли в нем элемент, равный "specialword". Если такой элемент найден, переменная found устанавливается в true, и цикл прекращает свою работу с помощью оператора break.

0

Конечно! Вот перевод этого фрагмента на русский язык в стиле ответа на вопрос на StackOverflow:


С использованием современных методов массива в JavaScript:

Array.prototype.includes() // введен в ES7:

  • возвращает логическое значение (boolean)
const data = {
  categories: [
    "specialword",
    "word1",
    "word2"
  ]
}

console.log("Array.prototype.includes()")
// Array.prototype.includes()
// возвращает логическое значение
console.log(data.categories.includes("specialword")) // true
console.log(data.categories.includes("non-exist")) // false
.as-console-wrapper { max-height: 100% !important; top: 0; }

Array.prototype.find() // введен в ES6:

  • возвращает найденный элемент или undefined
const data = {
  categories: [
    "specialword",
    "word1",
    "word2"
  ]
}

console.log("Array.prototype.find()")
// Array.prototype.find()
// возвращает элемент, если он найден
// возвращает undefined, если не найден
console.log(data.categories.find(el => el === "specialword") != undefined) // true
console.log(data.categories.find(el => el === "non-exist") != undefined) // false
.as-console-wrapper { max-height: 100% !important; top: 0; }

Если у вас есть дополнительные вопросы, пожалуйста, дайте знать!

0

Я не люблю $.inArray(..), это такое некрасивое, "джеквориевское" решение, которое большинство здравомыслящих людей не потерпят. Вот фрагмент кода, который добавляет простую функцию contains(str) в вашу коллекцию методов:

$.fn.contains = function (target) {
  var result = null;
  $(this).each(function (index, item) {
    if (item === target) {
      result = item;
    }
  });
  return result ? result : false;
}

Аналогичным образом, вы можете обернуть $.inArray в расширение:

$.fn.contains = function (target) {
  return ($.inArray(target, this) > -1);
}

Эти решения позволяют более элегантно проверять наличие элементов без использования $.inArray.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь