Ich suche nach einer Methode für Javascript, die true oder false zurückgibt, wenn es leer ist. So etwas wie Ruby any?
oderempty?
[].any? #=> false
[].empty? #=> true
quelle
Ich suche nach einer Methode für Javascript, die true oder false zurückgibt, wenn es leer ist. So etwas wie Ruby any?
oderempty?
[].any? #=> false
[].empty? #=> true
JavaScript hat die Array.prototype.some()
Methode:
[1, 2, 3].some((num) => num % 2 === 0);
Gibt zurück, true
weil das Array (mindestens) eine gerade Zahl enthält.
Im Allgemeinen ist die Array
Klasse in der Standardbibliothek von JavaScript im Vergleich zu Ruby's Enumerable ziemlich schlecht . Es gibt keine isEmpty
Methode und .some()
erfordert, dass Sie eine Funktion übergeben, sonst wird eine undefined is not a function
Fehlermeldung angezeigt. Sie können Ihre eigenen .isEmpty()
sowie eine definieren .any()
, die Ruby's näher kommt:
Array.prototype.isEmpty = function() {
return this.length === 0;
}
Array.prototype.any = function(func) {
return this.some(func || function(x) { return x });
}
Bibliotheken wie underscore.js und lodash bieten Hilfsmethoden wie diese. Wenn Sie an Rubys Erfassungsmethoden gewöhnt sind, ist es möglicherweise sinnvoll, sie in Ihr Projekt aufzunehmen.
Die native JavaScript- .some()
Methode macht genau das, wonach Sie suchen:
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;});
arbeiten!some()
) und für andere hilfreicher sein kann.any()
Methode definiert und jemand sie verwendet, kann dieser Code auf seltsame Weise fehlschlagen, wenn er zusammen mit einer Bibliothek verwendet wird, die diesen Code verwendet, weil Sie ihn etwas anders definiert haben) und Erstellt Code, der für andere (Javascript-) Entwickler schwerer zu lesen ist. Und der ganze Grund für diesen Ansatz ist, dass ein Ruby-Entwickler sich weigerte zu lernen, dass ersome()
statt schreiben sollteany()
und dass er nicht vergessen sollte, eine Funktion an ihn zu übergeben, selbst wenn das Array leer ist ...Ich bin etwas spät zur Party, aber ...
[].some(x => !!x)
quelle
[false, 0, '', null, undefined]
[,,,]
. Ich denke, das!!
ist dann nicht wirklich erforderlich.[].some(x => Boolean)
[].some(Boolean)
var a = []; a.length > 0
Ich würde nur die Länge überprüfen. Sie können es möglicherweise in eine Hilfsmethode einwickeln, wenn Sie möchten.
quelle
JavaScript-Arrays können gewissermaßen "leer" sein, selbst wenn die Länge des Arrays ungleich Null ist. Zum Beispiel:
var empty = new Array(10); var howMany = empty.reduce(function(count, e) { return count + 1; }, 0);
Die Variable "howMany" wird auf gesetzt
0
, obwohl das Array mit einer Länge von initialisiert wurde10
.Da viele der Array-Iterationsfunktionen nur Elemente des Arrays berücksichtigen, denen tatsächlich Werte zugewiesen wurden, können Sie mit diesem Aufruf
.some()
überprüfen, ob in einem Array tatsächlich etwas enthalten ist:var hasSome = empty.some(function(e) { return true; });
Der an übergebene Rückruf
.some()
wird beitrue
jedem Aufruf zurückgegeben. Wenn der Iterationsmechanismus also ein Element des Arrays findet, das überprüft werden sollte, ist das Ergebnistrue
.quelle
Ich glaube, dies ist die sauberste und lesbarste Option:
var empty = []; empty.some(x => x); //returns false
quelle
Wenn Sie wirklich verrückt werden möchten, fügen Sie dem Prototyp eine neue Methode hinzu:
if (!('empty' in Array.prototype)) { Array.prototype.empty = function () { return this.length === 0; }; } [1, 2].empty() // false [].empty() // true
DEMO
quelle
if (!('any' in Array.prototype)) { Array.prototype.any = function () {return !!this.filter(function(e){ return e }).length;};}
Dies funktioniert alsArray.any()
Danke AndyArray hat eine Längeneigenschaft :
[].length // 0 [0].length // 1 [4, 8, 15, 16, 23, 42].length // 6
quelle
Verwenden Sie einfach
Array.length
:var arr = []; if (arr.length) console.log('not empty'); else console.log('empty');
Siehe MDN
quelle
Was Sie wollen, ist , Ruby
.empty
nicht.empty()
vollständig nachzuahmen:Object.defineProperty( Array.prototype, 'empty', { get: function ( ) { return this.length===0 } } );
dann
[].empty //true [3,2,8].empty //false
Für jeden siehe meine Antwort hier
quelle
Polyfill *:
Array.prototype.any=function(){ return (this.some)?this.some(...arguments):this.filter(...arguments).reduce((a,b)=> a || b) };
Wenn Sie es als Ruby bezeichnen möchten, bedeutet
.any
dies.any()
: Verwenden Sie: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
quelle