Массив.indexOf()
Метод indexOf()
вернет первый индекс (позицию), где можно найти элемент в массиве. Если этот элемент не существует в массиве, он вернет -1 (false).
const myFruits = [ 'banana', 'orange', 'apple', 'grape' ] console.log( myFruits.indexOf( 'orange' ) ) // 1 console.log( myFruits.indexOf( 'durian' ) ) // -1 if ( myFruits.indexOf( 'apple' ) ) { // do something only if apple exists in array // if it doesn't exist, // a false flag will cause this portion to not run }
Несмотря на то, что это старый метод, я по-прежнему предпочитаю его для поиска предметов, потому что он может не только сказать вам, существует ли предмет, но и где он находится. Не говоря уже о том, что он хорошо поддерживается во всех современных браузерах, а также в IE9 и выше.
Массив.includes()
Это метод ES6 (относительно новый) для проверки существования элемента в массиве. Он просто вернет истинное или ложное значение.
const myFruits = [ 'banana', 'orange', 'apple', 'grape' ] console.log( myFruits.includes( 'orange' ) ) // true console.log( myFruits.includes( 'durian' ) ) // false if ( myFruits.includes( 'apple' ) ) { // do something only if apple exists in array // if it doesn't exist, // a false flag will cause this portion to not run }
Хотя результат и использование очень похожи, есть несколько вещей, которые вы должны отметить. Он возвращает только истину или ложь; он не говорит вам, где находится элемент в массиве, поэтому, если вам нужно что-то сделать с элементом, вам все равно придется вернуться к старому методу Array.indexOf(), чтобы найти элемент. Кроме того, он не поддерживается IE, поэтому, если вам нужно использовать этот метод, вам придется либо использовать полифилл, либо не поддерживать пользователей IE.