Подтвердить что ты не робот

Что такое Array.any? для javascript

Я ищу метод для javascript возвращает true или false, когда он пуст.. что-то вроде Ruby any? или empty?

[].any? #=> false
[].empty? #=> true
4b9b3361

Ответ 1

Стандартная библиотека Javascript довольно бедна по сравнению с рубином. Перечисляется, большинство вещей должно быть написано вручную. С яркой стороны в большинстве случаев это тривиально.

 Array.prototype.isEmpty = function() {
     return !this.length;
 }

 Array.prototype.any = function(func) {
    return this.some(func || function(x) { return x });
 }

Библиотеки, такие как underscore, уже предоставляют такие обертки, если вы привыкли к рубиновым методам сбора, имеет смысл включить их в ваш проект.

Как указывал @Pointy, массивы JS не являются списками, это просто объекты с числовыми ключами и length, определенные как max(keys) + 1. Поэтому истинные методы сбора данных могут дать неожиданные результаты (например, почти все остальное на этом языке).

Ответ 2

Встроенный JavaScript .some() метод делает именно то, что вы ищете:

function isBiggerThan10(element, index, array) {
  return element > 10;
}

[2, 5, 8, 1, 4].some(isBiggerThan10);  // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true

Ответ 3

Я немного опаздываю на вечеринку, но...

[].some(x => !!x)

Ответ 4

var a = [];
a.length > 0

Я бы просто проверил длину. Вы можете потенциально обернуть его в вспомогательный метод, если хотите.

Ответ 5

Матрицы JavaScript могут быть "пустыми", в некотором смысле, даже если длина массива отлична от нуля. Например:

var empty = new Array(10);
var howMany = empty.reduce(function(count, e) { return count + 1; }, 0);

Переменная "howMany" будет установлена ​​на 0, даже если массив был инициализирован с длиной 10.

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

var hasSome = empty.some(function(e) { return true; });

Обратный вызов, переданный в .some(), будет возвращать true всякий раз, когда он вызывается, поэтому, если механизм итерации найдет элемент массива, который заслуживает проверки, результат будет true.

Ответ 6

Если вы действительно хотите получить орехи, добавьте новый метод в прототип:

if (!('empty' in Array.prototype)) {
  Array.prototype.empty = function () {
    return this.length === 0;
  };
}

[1, 2].empty() // false
[].empty() // true

DEMO

Ответ 7

Array имеет свойство length:

[].length // 0
[0].length // 1
[4, 8, 15, 16, 23, 42].length // 6

Ответ 8

Просто используйте Array.length:

var arr = [];

if (arr.length)
   console.log('not empty');
else
   console.log('empty');

См. MDN

Ответ 9

Вы хотите .empty not .empty() полностью имитировать Ruby:

     Object.defineProperty( Array.prototype, 'empty', {
           get: function ( ) { return this.length===0 }
      } );    

затем

[].empty //true
[3,2,8].empty //false

Для любого, см. мой ответ здесь

Ответ 10

polyfill *:

Array.prototype.any=function(){
    return (this.some)?this.some(...arguments):this.filter(...arguments).reduce((a,b)=> a || b)
};

Если вы хотите назвать его как Ruby, это означает .any not .any(), используйте:

Object.defineProperty( Array.prototype, 'any', {
  get: function ( ) { return (this.some)?this.some(function(e){return e}):this.filter(function(e){return e}).reduce((a,b)=> a || b) }
} ); 

__

`*: https://en.wikipedia.org/wiki/Polyfill

Ответ 11

Я бы выбрал самый чистый, читаемый и элегантный вариант:

var empty = [];
empty.some(x => x); //returns false