Помогите разобраться с методом array.indexOf()

281
08 сентября 2017, 23:30

Добрый день. Не могу понять, как правильно сделать, чтобы метод indexOf() работал и выводил в консоль найденный элемент.

if (array.indexOf(element)) {
    console.log(element);
  } else {
    return -1 && console.log('Element not found');
}
Answer 1

Array.prototype.indexOf() возвращает позицию найденного элемента в массиве (с нуля). Если элемент не был найден, то возвращается -1.

Сначала необходимо проверить, есть ли в массиве искомый элемент вообще, а уж потом его выводить. Для проверки на -1 (отсутствие элемента) можно воспользоваться битовыми операциями: код внутри блока if выполнится, если элемент в массиве найден. Кстати говоря, это справедливо только для тех случаев, если в массиве все индексы положительные (и да, это не обязательное условие, к сожалению).

if (~array.indexOf(element)) {
    // ...
}

В целом ответ может выглядеть так:

let index = array.indexOf(element); // получаем позицию элемента (-1, если не найден)
if (~index) { // равносильно array.indexOf(element) !== -1
    console.log(array[index]);
}

Пример выше выведет element, если он есть в массиве.

Первым делом мы записываем индекс найденного (или нет, пока не важно) элемента в переменную. Далее мы проверяем эту переменную. Если ее значение - -1, то код не выполнится (если элемент не был найден). Если элемент был найден, то выводим элемент массива под индексом [index].

Стоит упомянуть, пожалуй, про читабельность такого кода. С одной стороны выглядит он намного красивее, а работает с таким же успехом (если не быстрее), но человек, читающий ваш код и незнакомый с подобного рода вещами может встать в ступор. Так что используйте на свое усмотрение.

Answer 2

Если ты в массиве ищешь элемент советую использовать метод Array.find() ссылка на доку: https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/find

Пример

const yourElement = element;
const findedElement = myArray.find(item => {
  return item === yourElement;
});

Array.find() вернет undefined если ничего не найдет

Answer 3

"use strict"; 
 
function findElementInArray(element, array) { 
 
    if ( ~array.indexOf(element) ) { 
        console.log(element); 
        return; 
    } 
 
    console.log('Element not found'); 
} 
 
findElementInArray(2, [1,2,3,4,5,6,7,8]); // 2 
findElementInArray('a', [1,2,3,4,5,6,7,8]); // Element not found

Answer 4

return -1; будет вызывать ошибку Illegal return statement, лучше вернуть строкой

var index = array.indexOf(element); 
if (index >=0) { 
    console.log(array[index]); 
  } else { 
    console.log('Element not found with index ' + index) 
 
}

READ ALSO
JS JSON - почему работает именно так? [дубликат]

JS JSON - почему работает именно так? [дубликат]

На данный вопрос уже ответили:

249
Когда делаю свайп слайда ==> выезжает меню меню находиться слева(slideout.js) как это решить можно?

Когда делаю свайп слайда ==> выезжает меню меню находиться слева(slideout.js) как это решить можно?

Здравствуйте есть сверстанный сайт и к нему подключен script slideoutjs и есть на сайте слайдер вот такая проблема когда я хочу сдвинуть свайпом...

290
Pug (Jade) динамическое добавление атрибута

Pug (Jade) динамическое добавление атрибута

Нужно в зависимости от переменной установить атрибут тега

283
Как подключать данные заново

Как подключать данные заново

Я пишу тесты, мне нужно в beforeEach каждый раз обновлять переменную mwЭто глобально доступный синглтон

255