我在寻找的JavaScript返回true或false的方法时,它是空的..像红宝石any?或empty?
[].any? #=> false
[].empty? #=> true
Answers:
JavaScript具有以下Array.prototype.some()方法:
[1, 2, 3].some((num) => num % 2 === 0);
返回,true因为数组中(至少)有一个偶数。
通常,与Ruby的Enumerable相比,JavaScript标准库中的Array类非常差。没有方法,要求您传入函数,否则会出错。您可以定义自己的对象,也可以定义更接近Ruby的对象,如下所示:isEmpty.some()undefined is not a function.isEmpty().any()
Array.prototype.isEmpty = function() {
return this.length === 0;
}
Array.prototype.any = function(func) {
return this.some(func || function(x) { return x });
}
诸如underscore.js和lodash之类的库提供了此类辅助方法,如果您习惯了Ruby的collection方法,则将它们包括在项目中可能是有意义的。
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()),并且可能对其他人有帮助。
any()方法,并且有人使用它,那么与使用此代码的库一起使用时,该代码可能会以怪异的方式失败,因为您对它的定义稍有不同)和创建其他(javascript)开发人员难以阅读的代码。这种方法的全部原因是,Ruby开发人员拒绝了解他们应该写some()而不是写,any()并且即使数组为空,他们也不应忘记将函数传递给它……
我参加聚会有点晚了,但是...
[].some(x => !!x)
[false, 0, '', null, undefined]
[,,,]。我想!!那时甚至根本不需要。
[].some(x => Boolean)
[].some(Boolean)
var a = [];
a.length > 0
我只是检查一下长度。如果愿意,可以将其包装在辅助方法中。
从某种意义上说,即使数组的长度非零,JavaScript数组也可以是“空”的。例如:
var empty = new Array(10);
var howMany = empty.reduce(function(count, e) { return count + 1; }, 0);
0即使将数组初始化为长度为,变量“ howMany”也将设置为10。
因此,由于许多Array迭代函数仅关注实际上已分配了值的数组元素,因此可以使用类似此调用的方法.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
if (!('any' in Array.prototype)) { Array.prototype.any = function () {return !!this.filter(function(e){ return e }).length;};}这就像Array.any()谢谢你安迪
您想要的.empty不是.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不是.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) }
} );
__
[12,5,8,1,4].some(function(e){ return e > 10;});正在工作!