什么是Array.any? 为JavaScript
我正在寻找一个JavaScript的方法返回true或false时,它是空的..像Ruby的东西any?
还是empty?
[].any? #=> false
[].empty? #=> true
与ruby的Enumerable相比,Javascript标准库相当差,大部分内容都应该由人工编写。 光明的一面,在大多数情况下这是微不足道的。
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
。 因此,真正的收集方法可以给出令人惊讶的结果(就像这种语言中的其他一切)。
JavaScript native .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
即使数组的长度不为零,JavaScript数组也可以是“空的”。 例如:
var empty = new Array(10);
var howMany = empty.reduce(function(count, e) { return count + 1; }, 0);
即使数组初始化为长度为10
,变量“howMany”也将设置为0
。
因此,因为许多数组迭代函数只关注数组中实际赋值的元素,您可以使用类似this的调用来.some()
以查看数组中是否有实际内容:
var hasSome = empty.some(function(e) { return true; });
传递给.some()
的回调只要被调用就会返回true
,所以如果迭代机制发现值得检查的数组元素,结果将是true
。