Я ищу метод для javascript возвращает true или false, когда он пуст.. что-то вроде Ruby any?
или empty?
[].any? #=> false
[].empty? #=> true
Я ищу метод для javascript возвращает true или false, когда он пуст.. что-то вроде Ruby any?
или empty?
[].any? #=> false
[].empty? #=> true
Стандартная библиотека 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
. Поэтому истинные методы сбора данных могут дать неожиданные результаты (например, почти все остальное на этом языке).
Встроенный 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
Я немного опаздываю на вечеринку, но...
[].some(x => !!x)
var a = [];
a.length > 0
Я бы просто проверил длину. Вы можете потенциально обернуть его в вспомогательный метод, если хотите.
Матрицы 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
.
Если вы действительно хотите получить орехи, добавьте новый метод в прототип:
if (!('empty' in Array.prototype)) {
Array.prototype.empty = function () {
return this.length === 0;
};
}
[1, 2].empty() // false
[].empty() // true
Array имеет свойство length:
[].length // 0
[0].length // 1
[4, 8, 15, 16, 23, 42].length // 6
Просто используйте Array.length
:
var arr = [];
if (arr.length)
console.log('not empty');
else
console.log('empty');
См. MDN
Вы хотите .empty
not .empty()
полностью имитировать Ruby:
Object.defineProperty( Array.prototype, 'empty', {
get: function ( ) { return this.length===0 }
} );
затем
[].empty //true
[3,2,8].empty //false
Для любого, см. мой ответ здесь
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) }
} );
__
Я бы выбрал самый чистый, читаемый и элегантный вариант:
var empty = [];
empty.some(x => x); //returns false