Проверка нахождения значения в массиве

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

var arr = ['.js', '.css', '.html'];
if (arr.indexOf('.jsx') === -1) { 
  // будет выполнено, когда значения нет 
}
if (arr.indexOf('.css') >= 0) {
  // будет выполнено, когда значение есть 
}

Нативного метода для подобных задач пока что нет. Он появится в спецификации ES2016 и будет называться includes. До того, как данный метод будет реализован, для данных целей можно использовать побитовый оператор ~:

var arr = ['.js', '.css', '.html'];
if (!~arr.indexOf('.jsx')) { 
  // будет выполнено, когда значения нет 
}
if (~arr.indexOf('.css')) {
  // будет выполнено, когда значение есть 
}

Оператор ~ возвращает число, которое равно ~n == -(n + 1): ~1 == -(1 + 1) == -2, ~0 == -(0 + 1) == -1, -1 == -(-1 + 1) == 0, ~10 == -(10 + 1) == -11. Подробнее о работе ~ и других побитовых операторов можно узнать в этой статье.

Комментарии