我正在尋找的JavaScript時,它是空的返回true或false的方法..像紅寶石any?
或empty?
東西Array.any是什麼?針對JavaScript
[].any? #=> false
[].empty? #=> true
我正在尋找的JavaScript時,它是空的返回true或false的方法..像紅寶石any?
或empty?
東西Array.any是什麼?針對JavaScript
[].any? #=> false
[].empty? #=> true
的Javascript標準庫比較差o ruby的Enumerable,大部分的東西都應該用手寫。光明的一面,在大多數情況下這是微不足道的。
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
。因此,真正的收集方法可以給出令人驚訝的結果(就像這種語言中的其他一切)。
陣列具有length property:
[].length // 0
[0].length // 1
[4, 8, 15, 16, 23, 42].length // 6
var a = [];
a.length > 0
我只是檢查一下長度。如果你願意的話,你可以用輔助方法把它包裝起來。
只需使用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
謝謝你的幫助。我發現[這裏](http://stackoverflow.com/a/7924304/3622415)Array.compact(我住在Ruby區域),他們說!!(任何真理)都會返回true,所以它可能就是這樣的! !array.filter(function(e){return e})。length? – kangkyu 2015-02-07 01:34:34
if(!('Array.prototype'中的'any?')){Array.prototype.any? = function(){return !! this.filter(function(e){return e})。length;};} ....我試過這個不起作用urgh – kangkyu 2015-02-07 01:48:02
[爲什麼不使用georg's?] (http://stackoverflow.com/a/28350435/1377002)另外,我不認爲你可以在方法名稱中有問號。 – Andy 2015-02-07 02:23:01
即使數組長度不爲零,JavaScript數組也可以是「空的」。例如:
var empty = new Array(10);
var howMany = empty.reduce(function(count, e) { return count + 1; }, 0);
變量「的howmany」將被設定爲0
,即使陣列初始化爲具有10
的長度。
因此,由於許多陣列迭代函數只注重實際已賦值的數組的元素,你可以使用這樣的呼叫.some()
看到如果一個數組中有什麼實際:
var hasSome = empty.some(function(e) { return true; });
傳遞給.some()
將返回true
在調用時,因此,如果迭代機制,發現這是值得檢查的數組元素的回調,其結果將是true
。
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
Array.prototype.any=function(){
return (this.some)?this.some(...arguments):this.filter(...arguments).reduce((a,b)=> a || b)
};
如果你要稱呼其爲紅寶石,這意味着.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) }
});
__
你想要的是.empty
不.empty()
完全模仿紅寶石:
Object.defineProperty(Array.prototype, 'empty', {
get: function () { return this.length===0 }
});
然後
[].empty //true
[3,2,8].empty //false
對於任何,看到我的回答here
我有點遲到了,但是......
[].some(x => !!x)
它的時間來改變接受的答案,我認爲;) – asiniy 2016-10-10 10:56:55