我正在寻找一个javascript返回true或false的方法,当它为空时......像Ruby any?或者empty?
[].any? #=> false
[].empty? #=> true
Run Code Online (Sandbox Code Playgroud)
    asi*_*niy 85
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
Run Code Online (Sandbox Code Playgroud)
        geo*_*org 15
与ruby的Enumerable相比,Javascript标准库相当差,大多数东西应该是手工编写的.从好的方面来说,这在大多数情况下都是微不足道的.
 Array.prototype.isEmpty = function() {
     return !this.length;
 }
 Array.prototype.any = function(func) {
    return this.some(func || function(x) { return x });
 }
Run Code Online (Sandbox Code Playgroud)
像下划线这样的库已经提供了这样的包装器,如果你已经习惯了ruby的收集方法,那么将它们包含在你的项目中是有意义的.
正如@Pointy指出的那样,JS数组不是列表,它们只是带有数字键的对象并被length定义为max(keys) + 1.因此,真正的收集方法可以产生令人惊讶的结果(就像这种语言中的其他所有内容一样).
Dud*_*udo 14
我参加派对有点晚了,但......
[].some(x => !!x)
Run Code Online (Sandbox Code Playgroud)
        在某种意义上,即使数组的长度不为零,JavaScript数组也可以是"空的".例如:
var empty = new Array(10);
var howMany = empty.reduce(function(count, e) { return count + 1; }, 0);
Run Code Online (Sandbox Code Playgroud)
变量"howMany"将被设置为0,即使数组被初始化为长度为10.
因此,由于许多Array迭代函数只关注实际已赋值的数组元素,因此您可以使用类似于此调用的内容.some()来查看数组中是否包含其中的任何内容:
var hasSome = empty.some(function(e) { return true; });
Run Code Online (Sandbox Code Playgroud)
传递给它的回调.some()将true在每次调用时返回,因此如果迭代机制找到值得检查的数组元素,结果将是true.
我相信这是最干净和可读的选项:
var empty = [];
empty.some(x => x); //returns false
Run Code Online (Sandbox Code Playgroud)
        只需使用Array.length:
var arr = [];
if (arr.length)
   console.log('not empty');
else
   console.log('empty');
Run Code Online (Sandbox Code Playgroud)
参见MDN
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           64052 次  |  
        
|   最近记录:  |