什么是数组?对于javascript
我正在寻找一个javascript方法,当它为空时返回true或false。。类似Ruby什么是数组?对于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('
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