什么是数组?对于javascript

什么是数组?对于javascript,javascript,Javascript,我正在寻找一个javascript方法,当它为空时返回true或false。。类似Rubyany?或empty? [].any? #=> false [].empty? #=> true 阵列有一个: [].length//0 [0]。长度//1 [4,8,15,16,23,42]。长度//6 我只想检查一下长度。如果愿意,您可以将其包装在助手方法中。只需使用Array.length: var arr = []; if (arr.length) console.log('

我正在寻找一个javascript方法,当它为空时返回true或false。。类似Ruby
any?
empty?

[].any? #=> false
[].empty? #=> true
阵列有一个:

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

我只想检查一下长度。如果愿意,您可以将其包装在助手方法中。

只需使用
Array.length

var arr = [];

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

请参见

如果您真的想要得到坚果,请向原型添加新方法:

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

[1, 2].empty() // false
[].empty() // true
JavaScript有如下方法:

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

一般来说,与Ruby相比,JavaScript标准库中的性能非常差。没有
isEmpty
方法和
。some()
要求您传入一个函数,否则您将得到一个
未定义的不是一个函数
错误。您可以定义自己的
.isEmpty()
以及一个更接近Ruby的
.any()
,如下所示:

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

Array.prototype.any = function(func) {
   return this.some(func || function(x) { return x });
}
类库和提供了类似于这些的助手方法,如果您习惯于Ruby的收集方法,那么将它们包括在项目中可能是有意义的。

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

JavaScript本机完全满足您的要求:

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

[2, 5, 8, 1, 4].some(isBiggerThan10);  // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true
polyfill*: 如果您想将其称为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) }
} ); 
__


`*:

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

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



有关任何,请参阅我的答案我参加聚会有点晚了,但是

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

我认为这是最清晰易读的选择:

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

谢谢你的帮助。我找到了Array.compact(我住在Ruby区),他们说!!(任何真实的东西)都会返回真实,所以可能是这样的!!array.filter(函数(e){return e}).length?if(!('any'){array.prototype.any?=函数(){return!!this.filter(函数(e){return e}).length;};}。。。。我试过这个也没用,我不认为你可以在方法名中有问号。
if(!('any'in Array.prototype)){Array.prototype.any=function(){return!!this.filter(function(e){return e}).length;};}
这就像
Array.any()
谢谢你,谢谢你,我现在看到了
[12,5,8,1,4]。一些(function(e){return e>10;})
正在工作!@kangkyu我想是时候接受这个答案了;)很抱歉反应太晚,但是@asiniy我仍然认为接受的答案应该被接受,因为它有更多的细节(包括
some()
)而且对其他人更有帮助。@kangkyu,除了目前接受的答案外,他花更多的时间尝试使用Ruby-ish,而不是实际给出javascript答案。它还建议您编写自己的包装器(这实际上是不必要的),并以一种潜在有害的方式这样做(即扩展原型以获得非多边形填充的东西)@LokiKriasus扩展原型可能会导致未来的问题(即,如果将来javascript定义了
any()
方法,并且有人使用它,那么当与使用该代码的库一起使用时,该代码可能会以奇怪的方式失败,因为您对该代码的定义略有不同),并创建了更难为其他人阅读的代码(javascript)这种方法的全部原因是Ruby开发人员拒绝学习他们应该编写
some()
,而不是
any()
而且即使数组为空,他们也不应该忘记将函数传递给它……我认为问题在于,如果你有一个大数组,那么你要计算所有元素unnecessarily@Snr所有主要的解释器都为数组的长度提供了有效的访问器:我想这在
[false,0',,null,undefined]中不起作用
它工作得非常好,@BrookJordan。它返回false。其中的零是有问题的,但对于其余部分,我相信这就是OP所追求的功能。寻找“真实”实体。啊,好吧,我想我误解了empty。当我读empty时,我想到了
[,,]
。我猜
!!
实际上是不需要的。另一种可以说是更漂亮的书写方式:
[]。一些(x=>布尔值)
@phil294应该是
[]。一些(布尔值)
如果空值包含假值怎么办?
     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