Array.size () vs Array.length

385

Was ist der Unterschied zwischen den beiden?

Ich weiß also, dass dies array.size()eine Funktion ist, während array.lengthes sich um eine Eigenschaft handelt. Gibt es einen Anwendungsfall für die Verwendung übereinander? Ist man effizienter? (Ich würde mir vorstellen .length, deutlich schneller zu sein, da es sich eher um eine Eigenschaft als um einen Methodenaufruf handelt.) Warum sollte man jemals die langsamere Option verwenden? Gibt es einige Browser, die mit dem einen oder anderen nicht kompatibel sind?

  var x = [];
  console.log(x.size());
  console.log(x.length);
  console.log(x.size()==x.length);
  x =[1,2,3];
  console.log(x.size());
  console.log(x.length);
  console.log(x.size()==x.length);

Wird drucken:

  0, 0, true
  3, 3, true
Abraham P.
quelle
63
Wo haben Sie die Array.size()Methode in nativem JavaScript gefunden?
VisioN
2
Chrome hat nicht .size...
0x499602D2
1
@AbrahamP idk welche Chrome-Konsole Sie verwenden ...
Naftali aka Neal
3
.size()ist wahrscheinlich aus dem Prototype-Framework: prototypejs.org/doc/latest/language/Array/prototype/size
MikeM

Antworten:

535

Array.size () ist keine gültige Methode

Verwenden Sie immer die Eigenschaft length

Es gibt eine Bibliothek oder ein Skript, die die Größenmethode zum Array-Prototyp hinzufügt, da dies keine native Array-Methode ist. Dies wird normalerweise durchgeführt, um Unterstützung für einen benutzerdefinierten Getter hinzuzufügen. Ein Beispiel für die Verwendung wäre, wenn Sie die Größe eines Arrays im Speicher abrufen möchten (was das einzige ist, was ich mir vorstellen kann, das für diesen Namen nützlich wäre).

Underscore.js definiert leider eine sizeMethode, die tatsächlich die Länge eines Objekts oder Arrays zurückgibt. Da die Längeneigenschaft einer Funktion leider als die Anzahl der benannten Argumente definiert ist, erklärt die Funktion, dass sie eine Alternative verwenden müssen, und die Größe wurde ausgewählt (Anzahl wäre eine bessere Wahl gewesen).

Gabriel
quelle
154

.size()ist keine native JS-Funktion von Array(zumindest nicht in einem mir bekannten Browser).

.length sollte verwendet werden.


Wenn

.size() funktioniert auf Ihrer Seite, stellen Sie sicher, dass keine zusätzlichen Bibliotheken enthalten sind, wie z. B. ein Prototyp , der mit demArrayPrototyp inKonflikt gerät.

oder

Möglicherweise befindet sich in Ihrem Browser ein Plugin, das mit dem ArrayPrototyp in Konflikt gerät .

Naftali alias Neal
quelle
@ BartFriederichs gut, ich bin in Chrome, aber das ist gut zu wissen :-D
Naftali aka Neal
Es funktioniert in Chrome, funktioniert nicht in Firefox, ich neige dazu, Chrome zum Debuggen zu verwenden, also schien es zu funktionieren. Vielen Dank für den Hinweis auf seine Nichtexistenz.
Abraham P
9
Wenn es in Chrome für Sie funktioniert, gibt es wahrscheinlich eine zusätzliche Bibliothek, die Sie auf Ihrer Seite aufrufen und die es dem Array-Prototyp hinzufügt.
Spike Williams
1
Version 23.0.1271.97 [] .size function size () {return this.length;} Eigentlich ist es nur ein Wrapper um .length ... Ich fühle mich jetzt irgendwie dumm ...
Abraham P
2
@AbrahamP, drücke F12 auf DIESER Seite und tippe [].sizedie Konsole ein. Wenn es funktioniert, haben Sie eine Art Chrome-Plugin, das mit dem Array-Prototyp in Konflikt gerät, und ich wäre besorgt. :)
Aquinas
30

Die .size()Funktion ist in Jquery und vielen anderen Bibliotheken verfügbar.

Die .lengthEigenschaft funktioniert nur, wenn der Index eine Ganzzahl ist.

Die lengthEigenschaft wird mit dieser Art von Array arbeiten:

var nums = new Array();
nums[0] = 1; 
nums[1] = 2;
print(nums.length); // displays 2

Die lengthEigenschaft wird nicht mit dieser Art von Array arbeiten:

var pbook = new Array(); 
pbook["David"] = 1; 
pbook["Jennifer"] = 2;
print(pbook.length); // displays 0

In Ihrem Fall sollten Sie also die .lengthEigenschaft verwenden.

Saurabh Chandra Patel
quelle
Gibt es etwas, das mit Strings funktioniert, wenn die Größe nicht funktioniert?
Chris
2
@ Chris für Arrays mit String-Schlüsseln, wie pbookoben, können Sie verwenden $(pbook).size();[erfordert jQuery]
böse Pastete
3
Warum sollten Sie jedoch überall zwei Leerzeichen setzen?
Post Self
19

.size() ist jQuery's, wahrscheinlich verwechseln Sie jemanden oder haben ihn von jemand anderem übernommen, der die jQuery-Bibliothek in sein Projekt importiert hat.

Wenn Sie jQuery importiert hätten und gerne schreiben $(array).size()würden, würde dies die Arraylänge zurückgeben.

Julio Flores
quelle
1
Viele Bibliotheken verwenden .size()es nicht nur jquery
Naftali aka Neal
15

array.length ist nicht unbedingt die Anzahl der Elemente im Array:

var a = ['car1', 'car2', 'car3'];
a[100] = 'car100';
a.length; // 101

Die Länge des Arrays ist eins mehr als der höchste Index.

Wie zuvor erläutert Array.size() ist dies keine gültige Methode.

Mehr Informationen

user2811108
quelle
In der Praxis ist es die Anzahl der Elemente. Die meisten JS-Interpreter füllen Array-Zeilen mit undefiniert. In Ihrem Beispiel haben Sie 101 Elemente in Ihrem Array mit 97 Elementen ohne Wert (undefiniert), aber Elemente sind vorhanden. Es sieht so aus: ['car1', 'car2', 'car3', undefined * 97, 'car100'] Wenn Sie in diesem Array eine Schleife ausführen, wird Ihre Inkrementvariable nach der Schleife den Wert 101 haben.
ElJackiste
Andererseits ist array.length nicht unbedingt die Anzahl der definierten (nicht zugewiesenen) Werte im Array.
ElJackiste
4

Die Eigenschaft 'length' gibt den (last_key + 1) für Arrays mit numerischen Schlüsseln zurück:

var  nums  =  new  Array ();
nums [ 10 ]  =  10 ; 
nums [ 11 ]  =  11 ;
log.info( nums.length );

druckt 12!

Das wird funktionieren:

var  nums  =  new  Array ();
nums [ 10 ]  =  10 ; 
nums [ 11 ]  =  11 ;
nums [ 12 ]  =  12 ;
log.info( nums.length + '  /  '+ Object.keys(nums).length );
cskwg
quelle
Obwohl dies eine interessante Antwort ist, bin ich mir nicht ganz sicher, ob es eine Antwort auf diese Frage ist
OliverRadini
Das OP fragte 'Array.size () vs Array.length'. Aus den vorherigen Diskussionen wurde deutlich, dass die 'size'-Funktion nicht Teil von Standard-JavaScript ist, sondern von Bibliotheken implementiert wird. Ich gehe also davon aus, dass das OP daran interessiert ist, wie die tatsächliche Länge von JavaScript-Arrays abgerufen werden kann. Ich entdecke eine wenig bekannte 'Funktion' von JavaScript, die zu unerwartetem Verhalten führen kann, insbesondere da das Verhalten anders ist, wenn das Array andere Arten von Objekten enthält, wie z. B. Zeichenfolgen.
cskwg
2

Die Größe erkennt Duplikate und gibt die Anzahl der eindeutigen Werte zurück

const set1 = new Set([1, 2, 3, 4, 5, 5, 5, 6]);
console.log(set1.size);
// expected output: 6
rev
quelle
1

Eigentlich .size()ist es keine reine JavaScript-Methode, es gibt eine Accessor-Eigenschaft .sizedes Set- Objekts, die ein wenig aussieht, .size()aber es ist keine Funktionsmethode, genau wie ich sagte, es ist eine Accessor-Eigenschaft eines Set-Objekts, um die eindeutige Anzahl von anzuzeigen (eindeutige) Elemente in einem Set-Objekt.

Die Eigenschaft size accessor gibt die Anzahl der (eindeutigen) Elemente in einem Set-Objekt zurück.

const set1 = new Set();
const object1 = new Object();

set1.add(42);
set1.add('forty two');
set1.add('forty two');
set1.add(object1);

console.log(set1.size);
// expected output: 3

Und lengthist eine Eigenschaft eines iterierbaren Objekts (Arrays), das die Anzahl der Elemente in diesem Array zurückgibt. Der Wert ist eine vorzeichenlose 32-Bit-Ganzzahl, die numerisch immer größer als der höchste Index im Array ist.

const clothing = ['shoes', 'shirts', 'socks', 'sweaters'];

console.log(clothing.length);
// expected output: 4
AmerllicA
quelle
0

Mit der Eigenschaft .length können Sie die Anzahl der Elemente in einem Array festlegen oder zurückgeben. Rückgabewert ist eine Zahl

> set the length: let count = myArray.length;
> return lengthof an array : myArray.length

Wir können Sie .size, falls wir doppelte Werte filtern und die Anzahl der Elemente in einer Menge ermitteln müssen.

const set = new set([1,1,2,1]); 
 console.log(set.size) ;`
Sunali Bandara
quelle