在 JavaScript 中,Array.any 的等价物是什么?

我正在为 JavaScript 寻找一个方法,当它为空时返回 true 或 false... 像 Ruby any?empty?这样的东西

[].any? #=> false
[].empty? #=> true
175567 次浏览

数组有一个 长度属性:

[].length // 0
[0].length // 1
[4, 8, 15, 16, 23, 42].length // 6
var a = [];
a.length > 0

我只检查长度,如果你愿意,你可以把它包装在一个助手方法中。

使用 Array.length:

var arr = [];


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

参见 MDN

如果你真的想疯狂一把,在原型中添加一个新的方法:

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


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

演示

JavaScript 使用的是 Array.prototype.some()方法:

[1, 2, 3].some((num) => num % 2 === 0);

返回 true,因为数组中(至少)有一个偶数。

一般来说,JavaScript 标准库中的 Array与 Ruby 的 数不胜数相比非常糟糕。没有 isEmpty方法,而且 .some()要求您传入函数,否则您将得到一个 undefined is not a function错误。你可以定义你自己的 .isEmpty(),也可以定义一个更接近 Ruby 的 .any(),如下所示:

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


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

下划线 js浪荡这样的库提供了这样的帮助器方法,如果您已经习惯了 Ruby 的集合方法,那么将它们包含在您的项目中可能是有意义的。

从某种意义上说,JavaScript 数组可以是“空的”,即使数组的长度是非零的。例如:

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

变量“ how many”将被设置为 0,即使数组被初始化为 10长度。

因此,由于很多 Array 迭代函数只关注实际赋值的数组元素,所以您可以使用类似于对 .some()的调用来查看数组中是否有实际的值:

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

传递给 .some()的回调将在每次调用时返回 true,因此如果迭代机制发现数组中值得检查的元素,结果将是 true

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

填料 * :

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

如果你想把它叫做 Ruby,意思是 .any而不是 .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

你需要的是 .empty而不是 .empty()来完全模仿 Ruby:

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

那么

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

有关 任何,请参阅我的答案 给你

我有点迟到了,但是..。

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

我相信这是最干净和可读的选择:

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