Рубрики

Нужно использовать функции массива JavaScript — часть 1

В этой статье мы собираемся обсудить следующие две функции массива JavaScript

  1. Array.prototype.every ()
  2. Array.prototype.some ()

Обе эти функции широко используются в промышленности и делают код Javascript чистым, модульным и простым для понимания.

Array.prototype.every ()

Описание: функция Array.every () используется, когда вам нужно проверить каждый элемент данного массива. Array.every () принимает функцию обратного вызова в качестве аргумента, который вызывается для каждого элемента массива. Функция обратного вызова должна возвращать либо true, либо false. Если все элементы массива удовлетворяют функции проверки и, таким образом, функция обратного вызова возвращает true для всех элементов массива, тогда Array.every () возвращает true. В противном случае Array.every () возвращает false, как только встречает первый элемент, который не удовлетворяет функции валидатора.

Синтаксис: arr.every (обратный вызов [, thisArg])

Параметры: callback : функция, вызываемая для каждого элемента массива arr.
currentValue : значение элементов, обрабатываемых в данный момент.
index (необязательно): индекс элемента currentValue в массиве, начиная с 0
array (необязательно): полный массив, для которого вызывается Array.every.

thisArg (необязательно): контекст, который необходимо передать, поскольку он будет использоваться при выполнении функции обратного вызова. Если контекст передан, он будет использоваться как этот для каждого вызова функции обратного вызова, в противном случае по умолчанию используется undefined.

Пример использования:
1. Проверить, что каждый элемент целочисленного массива меньше 100
2. Проверить, имеет ли каждый элемент массива определенный тип данных, например String.

Примеры

  1. Для данного массива напишите функцию, чтобы проверить, все ли элементы этого массива меньше 100 или нет.

Поэтому наивный подход заключается в использовании цикла for, как показано ниже.

function fnIsLEssThan100_loop(arr){

  for(var i = 0 ; i < arr.length; i ++){

      if(arr[i] >= 100){

          return false;

      }

  }

  return true;

}
function fnIsLEssThan100_loop([30,60,90]);
function fnIsLEssThan100_loop([30,60,90,120]);

true
false

Хотя приведенная выше реализация проста для понимания любого начинающего программиста, но есть некоторые ненужные проверки, о которых должен заботиться программист. Например, механизм короткого замыкания, то есть программист должен явно убедиться, что, как только цикл встретит первый элемент, который не соответствует заданному условию, цикл должен прерваться и вернуть false. Также до тех пор, пока программист не углубится в логику кода, он / она не сможет понять, что делает этот цикл for. Но с использованием Array.every () такое же поведение может быть достигнуто с гораздо более понятным, интуитивно понятным и меньшим количеством кода.

function fnIsLesThan100_Every(arr){

   return arr.every(function(element){

            return(element < 100):

           });

}

  
fnIsLesThan100_Every([30,60,90])
fnIsLesThan100_Every([30,60,90,120])

true
false
  1. Для данного массива напишите функцию, чтобы проверить, все ли элементы этого массива имеют определенный тип данных.

Опять же, наивным подходом было бы перебирать массив, используя цикл for.

function fnCheckDatatype_loop(arr. sDatatype){

    for(var i = 0 ; i < arr.length; i ++){

      if(typeof(arr[i]) !== sDatatype){

          return false;

}

  

 fnCheckDatatype_loop(["Geeks","for","Geeks"],"string")

 fnCheckDatatype_loop(["Geeks",4,"Geeks"],"string")

true
false

Приведенный выше фрагмент кода имеет те же лазейки, что и в предыдущем примере. Используя arr.Every (), эти лазейки снова исправляются в приведенном ниже фрагменте кода. Еще один момент, который следует отметить в приведенном ниже фрагменте кода, заключается в том, что мы передаем два аргумента в функцию array.every (). Первая — это функция обратного вызова (в нашем случае это анонимная функция), а вторая — sDatatype. Поскольку при каждом вызове функции обратного вызова нам нужна внешняя переменная, мы передаем ее в качестве второго аргумента в качестве переменной this.

function fnCheckDatatype_Every(arr, sDatatype){

   return arr.every(function(element){

            return typeof(element) === sDatatype;

           },sDatatype);

}

  
fnCheckDatatype_loop(["Geeks","for","Geeks"],"string")

 fnCheckDatatype_loop(["Geeks",4,"Geeks"],"string")

true
false

Array.prototype.some ()

Описание: функция массива JavaScript Array.some () находится в некоторой противоположности Array.every (). Функция Array.some () используется, когда вам нужно проверить, прошел ли хотя бы один элемент данного массива тест, реализованный функцией обратного вызова. Array.some () принимает функцию обратного вызова в качестве аргумента, которая должна возвращать либо true, либо false. Функция обратного вызова вызывается для каждого элемента массива до тех пор, пока она не вернет истину хотя бы для одного элемента массива. Если ни один из элементов в массиве не проходит проверку функции обратного вызова, Array.some () возвращает false.

Синтаксис: Array.some (обратный вызов [, thisArg])

Параметры: callback : функция, вызываемая для каждого элемента массива arr.
currentValue : значение элементов, обрабатываемых в данный момент.
index (необязательно): индекс элемента currentValue в массиве, начиная с 0
array (необязательно): полный массив, для которого вызывается Array.some ()

thisArg (необязательно): контекст, который необходимо передать, поскольку он будет использоваться при выполнении функции обратного вызова. Если контекст передан, он будет использоваться как этот для каждого вызова функции обратного вызова, в противном случае по умолчанию используется undefined.

Пример использования:
1. Проверить, если какой-либо элемент массива больше 100.
2. Проверить, является ли какой-либо элемент массива четным.

Примеры

  1. Для данного массива напишите функцию, чтобы проверить, содержит ли массив любое число больше 100.

Наивный подход

function fnIsGreaterThan100_loop(arr){

    for(var i = 0 ; i < arr.length; i ++){

      if(arr[i] > 100){

          return true;

      }

   }

   return false;

}

  
fnIsGreaterThan100_loop([30,60,90,120]);
fnIsGreaterThan100_loop([30,60,90]);

true
false

Использование Array.some ()

function fnIsGreaterThan100_some(arr){

     return arr.some(function(element){

            return(element . 100):

     });

}

  
fnIsGreaterThan100_some([30,60,90,120]);
fnIsGreaterThan100_some([30,60,90]);

 true
 false
  1. Для данного массива напишите функцию, чтобы проверить, содержит ли массив какое-либо четное число.

Наивный подход

function fnIsEven_loop(arr){

    for(var i = 0 ; i < arr.length; i ++){

      if(arr[i] % 2 === 0){

          return true;

      }

    }

    return false;

}

  
fnIsEven_loop([1,3,5]);
fnIsEven_loop([1,3,5,6]);

 false
 true

Использование Array.some ()

function fnIsEven_some(arr){

       return arr.some(function(element){

            return(element %2 === 0):

       });

}

  
fnIsEven_some([1,3,5]);
fnIsEven_some([1,3,5,6]);

 false
 true

Одна из распространенных ошибок программистов при использовании функций массива, таких как Array.every () и Array.some (), заключается в том, что они забывают возвращаемое значение в функции обратного вызова. Имейте в виду, что если вы не возвращаете никакого значения из функции обратного вызова, возвращается значение null, которое будет интерпретировано как ложное.

Кроме того, важно знать, что эти функции массива были введены в ECMAScript 5. Таким образом, эти функции поддерживаются в IE9 или выше. Если вам нужно использовать его и для старых браузеров, то вам может помочь библиотека типа underscore.js, которая имеет эквивалентную реализацию таких функций.

Должны использовать функции массива JavaScript -Часть 2

Должны использовать функции массива JavaScript — Часть 3

Кроме того, если вы хотите глубже погрузиться в вышеуказанные функции, вы можете обратиться к следующим официальным ссылкам
1. http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.16
2. http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.17

Об авторе:

«Харшит — технологический энтузиаст и увлекается программированием. Он держит B.Tech. Степень в области компьютерных наук от JIIT, Noida и в настоящее время работает в качестве фронт-разработчика в SAP. Он также игрок в настольный теннис государственного уровня. Помимо этого он любит отдыхать, смотря фильмы и английские ситкомы. Он базируется в Дели, и вы можете связаться с ним по адресу https://in.linkedin.com/pub/harshit-jain/2a/129/bb5.

Если вы также хотите продемонстрировать свой блог здесь, пожалуйста, смотрите GBlog для записи гостевого блога на GeeksforGeeks.

Рекомендуемые посты:

Нужно использовать функции массива JavaScript — часть 1

0.00 (0%) 0 votes