我正在为 JavaScript 寻找一个方法,当它为空时返回 true 或 false... 像 Ruby any?或 empty?这样的东西
any?
empty?
[].any? #=> false [].empty? #=> true
数组有一个 长度属性:
[].length // 0 [0].length // 1 [4, 8, 15, 16, 23, 42].length // 6
var a = []; a.length > 0
我只检查长度,如果你愿意,你可以把它包装在一个助手方法中。
使用 Array.length:
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
演示
JavaScript 使用的是 Array.prototype.some()方法:
Array.prototype.some()
[1, 2, 3].some((num) => num % 2 === 0);
返回 true,因为数组中(至少)有一个偶数。
true
一般来说,JavaScript 标准库中的 Array级与 Ruby 的 数不胜数相比非常糟糕。没有 isEmpty方法,而且 .some()要求您传入函数,否则您将得到一个 undefined is not a function错误。你可以定义你自己的 .isEmpty(),也可以定义一个更接近 Ruby 的 .any(),如下所示:
Array
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 }); }
像 下划线 js和 浪荡这样的库提供了这样的帮助器方法,如果您已经习惯了 Ruby 的集合方法,那么将它们包含在您的项目中可能是有意义的。
从某种意义上说,JavaScript 数组可以是“空的”,即使数组的长度是非零的。例如:
var empty = new Array(10); var howMany = empty.reduce(function(count, e) { return count + 1; }, 0);
变量“ how many”将被设置为 0,即使数组被初始化为 10长度。
0
10
因此,由于很多 Array 迭代函数只关注实际赋值的数组元素,所以您可以使用类似于对 .some()的调用来查看数组中是否有实际的值:
var hasSome = empty.some(function(e) { return true; });
传递给 .some()的回调将在每次调用时返回 true,因此如果迭代机制发现数组中值得检查的元素,结果将是 true。
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
Array.prototype.any=function(){ return (this.some)?this.some(...arguments):this.filter(...arguments).reduce((a,b)=> a || b) };
如果你想把它叫做 Ruby,意思是 .any而不是 .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) } } );
好吧
’* : https://en.wikipedia.org/wiki/Polyfill
你需要的是 .empty而不是 .empty()来完全模仿 Ruby:
.empty
.empty()
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