Array.prototype.indexOf()
Ця особливість є добре створеною і роботою, пов'язаною з багатьма пристроями і розробниками версій. It's been available across browsers since July 2015 .
Зведення
Метод indexOf() повертає перший індекс, яким даний елемент може бути знайдений в масиві або -1, якщо такого індексу немає.
Синтаксис
arr.indexOf(searchElement[, fromIndex = 0])
Параметри
Шуканий елемент у масиві.
Індекс, з якого розпочинати пошук. Якщо індекс більший або дорівнює довжині масиву, повертається -1, що означає, що масив навіть не проглядається. Якщо індекс є негативним числом, він сприймається як зміщення з кінця масиву. Зверніть увагу: якщо індекс негативний, масив все одно проглядається від початку до кінця. Якщо розрахований індекс виявляється меншим за 0, пошук ведеться по всьому масиву. Значення за умовчанням дорівнює 0, що означає, що весь масив проглядається.
Опис
Метод indexOf() порівнює шуканий елемент searchElement з елементами в масиві, використовуючи суворе порівняння (той самий метод використовується оператором === , потрійне одно).
Приклади
Приклад: використання indexOf()
У наступному прикладі indexOf() використовується для пошуку значень у масиві.
var array = [2, 5, 9]; array.indexOf(2); // 0 array.indexOf(7); //-1 array.indexOf(9, 2); // 2 array.indexOf(2, -1); //-1 array.indexOf(2, -3); // 0
Приклад: знаходження всіх входжень елемента
У наступному прикладі indexOf() використовується для пошуку всіх індексів елемента у вказаному масиві, які за допомогою push() додаються до іншого масиву.
var indices = []; var array = ["a", "b", "a", "c", "a", "d"]; var element = "a"; var idx = array.indexOf(element); while (idx! = -1) < indices.push (idx); idx = array.indexOf(element, idx + 1); >console.log(indices); // [0, 2, 4]
Поліфіл
Метод indexOf() був доданий до стандарту ECMA-262 у 5-му виданні; тому він може бути відсутнім в інших реалізаціях стандарту.Ви можете працювати з ним, додавши наступний код на початок ваших скриптів, він дозволяє використовувати indexOf() у реалізаціях, які не підтримують цей метод. Цей алгоритм є тим, що описаний в ECMA-262 5-го видання; він передбачає, що TypeError і Math.abs() мають початкові значення.
// Кроки алгоритму ECMA-262, 5-те видання, 15.4.4.14 // Посилання (en): http://es5.github.io/#x15.4.4.14 // Посилання (ru): http:// es5.javascript.ru/x15.4.html#x15.4.4.14 if (!Array.prototype.indexOf) < Array.prototype.indexOf = функція (searchElement, fromIndex) < var k; // 1. Покладемо O рівним результату виклику ToObject з передачею йому // значення this як аргумент. if (this == null) < throw new TypeError('"this" is null or not defined'); >var O = Object(this); // 2. Покладемо lenValue рівним результату виклику внутрішнього методу Get // об'єкта O з аргументом "length". // 3. Покладемо len рівним ToUint32(lenValue). var len = O.length >>> 0; // 4. Якщо len дорівнює 0, повернемо до -1. if (len === 0) < return -1; >// 5. Якщо було передано аргумент відIndex, покладемо n рівним // ToInteger(fromIndex); інакше покладемо n рівним 0. var n = + fromIndex | 0; if (Math.abs(n) === Infinity) < n = 0; >// 6. Якщо n >= len, повернемо -1. if (n> = len) < return -1; >// 7. Якщо n >= 0, покладемо k рівним n. // 8. Інакше, n = 0? n: len - Math.abs(n), 0); // 9. Поки k < len, повторюватимемо while (k < len) < // a. Покладемо Pk рівним ToString(k). // Це неявне перетворення для лівостороннього операнда оператора in // b. Покладемо kPresent рівним результату виклику внутрішнього методу // HasProperty об'єкта O з аргументом Pk. // Цей крок може бути поєднаний із кроком c // c. Якщо kPresent дорівнює true, виконаємо // i. Покладемо elementK рівним результату виклику внутрішнього методу Get // об'єкта O з аргументом ToString(k). // II. Покладемо ж рівним результату застосування // Алгоритму суворого порівняння на рівність між // searchElement і elementK. // iii. Якщо same дорівнює true, повернемо k.if (k in O && O[k] === searchElement) < return k; >k++; > return -1; >; >
Специфікації
Сумісність із браузерами
BCD tables only load in the browser
Дивіться також
String.prototype.indexOf()
Ця особливість є добре створеною і роботою, пов'язаною з багатьма пристроями і розробниками версій. It's been available across browsers since July 2015 .
Зведення
Метод indexOf() повертає індекс першого входження зазначеного значення в рядковий об'єкт String , на якому він був викликаний, починаючи з індексу від Index. Повертає -1 якщо значення не знайдено.
Інтерактивний приклад
Синтаксис
indexOf(searchString) indexOf(searchString, position)
Параметри
Рядок, що представляє потрібне значення.
Необов'язковий параметр. Розташування всередині рядка, звідки розпочинати пошук. Може бути будь-яким цілим числом. Значення за замовчуванням встановлено в 0. Якщо відIndex < 0 , пошук ведеться по всьому рядку (так само, якби був переданий 0). Якщо відIndex >= str.length , метод поверне -1, але тільки в тому випадку, якщо searchValue не дорівнює порожньому рядку, в цьому випадку він поверне str.length .
Опис
Символи у рядку йдуть зліва направо. Індекс першого символу дорівнює 0, а останнього символу в рядку stringName дорівнює stringName.length - 1 .
"Синій кит". indexOf ("Синій"); // поверне 0 "Синій кит". indexOf ("Блакитний"); // Поверне -1 "Синій кит".indexOf("Кіт", 0); // Поверне 6 "Синій кит".indexOf("Кіт", 5); // Поверне 6 "Синій кит".indexOf("", 8); // Поверне 8 "Синій кит". indexOf ("", 9); // Поверне 9 "Синій кит". indexOf ("", 10); // Поверне 9
Реєстрозалежність
Метод indexOf() є регістрозалежним. Наприклад, наступний вираз поверне -1:
"Синій кит". indexOf ("синій"); // Поверне -1
Перевірка на входження
Зверніть увагу, що значення 0 не обчислюється в true, а значення -1 не обчислюється в false. Тому для перевірки того, що конкретний рядок міститься в іншому рядку, правильно робити так:
"Синій кит".indexOf("Синій") !== -1; // true "Синій кит". indexOf ("Блакитний")! == -1; // false
Приклади
Приклад: використання методів indexOf() та lastIndexOf()
У наступному прикладі використовуються методи indexOf() і lastIndexOf() для знаходження значень у рядку "Дивний новий світ".
var anyString = "Дивний новий світ"; console.log( "Індекс першого входження "й" з початку рядка дорівнює" + anyString.indexOf("й"), ); // Відобразить 5 console.log( "Індекс першого входження "й" з кінця рядка дорівнює" + anyString.lastIndexOf("й"), ); // Відобразить 11 console.log( "Індекс входження "новий" з початку рядка дорівнює "+ anyString.indexOf("новий"), ); // Відобразить 7 console.log( "Індекс входження "новий" з кінця рядка дорівнює" + anyString.lastIndexOf("новий"), ); // Відобразить 7
Приклад: метод indexOf() та реєстрозалежність
У наступному прикладі визначаються дві рядкові змінні. Змінні містять однакові рядки, за винятком того, що слова в другому рядку починаються з великих літер. Перший виклик методу console.log() відобразить 18. Але оскільки метод indexOf() є регістрозалежним, рядок "чеддер" у змінній myCapString не буде знайдено, тому другий виклик методу console.log() відобразить -1.
var myString = "бри, пепер джек, чеддер"; var myCapString = "Брі, Пеппер Джек, Чеддер"; console.log( 'Виклик myString.indexOf("чеддер") повернув ' + myString.indexOf("чеддер"), ); // Відобразить 18 console.log( 'Виклик myCapString.indexOf("чеддер") повернув ' + myCapString.indexOf("чеддер"), ); // Відобразить -1
Приклад: використання методу indexOf() для підрахунку входження літери в рядок
Наступний приклад встановлює значення змінної count у кількість входження літери в рядок str :
var str = "Бути чи не бути, ось у чому питання."; var count = 0; var pos = str.indexOf("в"); while (pos! == -1) <count++; pos = str.indexOf("в", pos + 1); >console.log(count); // Відобразить 3
Специфікації
Сумісність із браузерами
BCD tables only load in the browser
Дивіться також