我正在寻找的JavaScript时,它是空的返回true或false的方法..像红宝石any?
或empty?
东西Array.any是什么?针对JavaScript
[].any? #=> false
[].empty? #=> true
我正在寻找的JavaScript时,它是空的返回true或false的方法..像红宝石any?
或empty?
东西Array.any是什么?针对JavaScript
[].any? #=> false
[].empty? #=> true
的Javascript标准库比较差o ruby的Enumerable,大部分的东西都应该用手写。光明的一面,在大多数情况下这是微不足道的。
Array.prototype.isEmpty = function() {
return !this.length;
}
Array.prototype.any = function(func) {
return this.some(func || function(x) { return x });
}
图书馆像下划线已经提供包装这样的,如果你已经习惯了Ruby的收集方法,这是有道理的,包括他们在您的项目。
正如@Pointy指出的,JS阵列不是列表,它们只是带有数字键的对象,而length
定义为max(keys) + 1
。因此,真正的收集方法可以给出令人惊讶的结果(就像这种语言中的其他一切)。
阵列具有length property:
[].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
谢谢你的帮助。我发现[这里](http://stackoverflow.com/a/7924304/3622415)Array.compact(我住在Ruby区域),他们说!!(任何真理)都会返回true,所以它可能就是这样的! !array.filter(function(e){return e})。length? – kangkyu 2015-02-07 01:34:34
if(!('Array.prototype'中的'any?')){Array.prototype.any? = function(){return !! this.filter(function(e){return e})。length;};} ....我试过这个不起作用urgh – kangkyu 2015-02-07 01:48:02
[为什么不使用georg's?] (http://stackoverflow.com/a/28350435/1377002)另外,我不认为你可以在方法名称中有问号。 – Andy 2015-02-07 02:23:01
即使数组长度不为零,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的原生.some()
method不正是你要寻找的:
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)
};
如果你要称呼其为红宝石,这意味着.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()
完全模仿红宝石:
Object.defineProperty(Array.prototype, 'empty', {
get: function () { return this.length===0 }
});
然后
[].empty //true
[3,2,8].empty //false
对于任何,看到我的回答here
我有点迟到了,但是......
[].some(x => !!x)
它的时间来改变接受的答案,我认为;) – asiniy 2016-10-10 10:56:55