【发布时间】:2021-10-10 02:41:50
【问题描述】:
我正在寻找一种 JavaScript 方法,当它为空时返回 true 或 false ......类似于 Ruby any? 或 empty?
[].any? #=> false
[].empty? #=> true
【问题讨论】:
标签: javascript
我正在寻找一种 JavaScript 方法,当它为空时返回 true 或 false ......类似于 Ruby any? 或 empty?
[].any? #=> false
[].empty? #=> true
【问题讨论】:
标签: javascript
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
【讨论】:
[12,5,8,1,4].some(function(e){ return e > 10;}); 工作了!
some())并且可以对其他人更有帮助。
any() 方法,并且有人使用它,那么当与一个库一起使用时,该代码可能会以奇怪的方式失败使用此代码是因为您对它的定义略有不同)并创建了其他(javascript)开发人员难以阅读的代码。这种方法的全部原因是Ruby开发人员拒绝学习他们应该写some()而不是any(),并且即使数组是空的,他们也不应该忘记将函数传递给它......
JavaScript 有 Array.prototype.some() 方法:
[1, 2, 3].some((num) => num % 2 === 0);
返回true,因为数组中有(至少)一个偶数。
一般来说,JavaScript 标准库中的 Array class 与 Ruby 的 Enumerable 相比相当差。没有isEmpty 方法,.some() 要求你传入一个函数,否则你会得到一个undefined is not a function 错误。您可以像这样定义自己的.isEmpty() 以及更接近Ruby 的.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 的收集方法,那么将它们包含在您的项目中可能是有意义的。
【讨论】:
我参加聚会有点晚了,但是...
[].some(x => !!x)
【讨论】:
[false, 0, '', null, undefined] 不兼容
[,,,]。我想!! 那时甚至都不需要。
[].some(x => Boolean)
[].some(Boolean)
var a = [];
a.length > 0
我只是检查长度。如果您愿意,您可以将其包装在辅助方法中。
【讨论】:
some 的人之外最简单和最好的答案。 KISS原则!
JavaScript 数组在某种意义上可以是“空的”,即使数组的长度不为零。例如:
var empty = new Array(10);
var howMany = empty.reduce(function(count, e) { return count + 1; }, 0);
变量“howMany”将设置为0,即使数组已初始化为长度为10。
因此,由于许多 Array 迭代函数只关注数组中实际被赋值的元素,您可以使用类似这样的调用 .some() 来查看数组中是否实际包含任何内容:
var hasSome = empty.some(function(e) { return true; });
传递给.some() 的回调在被调用时将返回true,因此如果迭代机制发现数组中的元素值得检查,则结果将为true。
【讨论】:
我相信这是最简洁易读的选项:
var empty = [];
empty.some(x => x); //returns false
【讨论】:
empty.some(x => true) 适用于 [undefined, null, false, 0]
[false, 0, "", undefined, null, NaN].some(x => x) 返回错误
empty.some(x => 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() 谢谢安迪
只需使用Array.length:
var arr = [];
if (arr.length)
console.log('not empty');
else
console.log('empty');
见MDN
【讨论】:
你想要的是 .empty 而不是 .empty() 来完全模仿 Ruby:
Object.defineProperty( Array.prototype, 'empty', {
get: function ( ) { return this.length===0 }
} );
然后
[].empty //true
[3,2,8].empty //false
any请看我的回答here
【讨论】:
数组有一个length property:
[].length // 0
[0].length // 1
[4, 8, 15, 16, 23, 42].length // 6
【讨论】:
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) }
} );
__
【讨论】: