Array.size () vs Array.length


385

Qual è la differenza tra i due?

Quindi so che array.size()è una funzione mentre array.lengthè una proprietà. Esiste un caso d'uso per utilizzare l'uno sull'altro? Uno è più efficiente? (Immagino .lengthdi essere significativamente più veloce in quanto si tratta di una proprietà piuttosto che di una chiamata al metodo?) Perché mai si dovrebbe usare l'opzione più lenta? Ci sono alcuni browser incompatibili con l'uno o l'altro?

  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);

Stampa:

  0, 0, true
  3, 3, true

63
Dove hai trovato il Array.size()metodo in JavaScript nativo?
VisioN,

2
Chrome non ha .size...
0x499602D2

1
@AbrahamP idk quale console Chrome stai usando ...
Naftali aka Neal


3
.size()proviene probabilmente dal framework prototipo
MikeM

Risposte:


535

Array.size () non è un metodo valido

Usa sempre la proprietà length

Esiste una libreria o uno script che aggiunge il metodo size al prototipo di array poiché questo non è un metodo di array nativo. Questo è comunemente fatto per aggiungere il supporto per un getter personalizzato. Un esempio di utilizzo di questo potrebbe essere quando si desidera ottenere le dimensioni in memoria di un array (che è l'unica cosa che mi viene in mente che sarebbe utile per questo nome).

Underscore.js purtroppo definisce un sizemetodo che in realtà restituisce la lunghezza di un oggetto o di un array. Poiché sfortunatamente la proprietà length di una funzione è definita come il numero di argomenti nominati, la funzione dichiara che dovevano usare un'alternativa e che era stata scelta la dimensione (conteggio sarebbe stata una scelta migliore).


154

.size()non è una funzione JS nativa di Array(almeno non in alcun browser che conosco).

.length dovrebbe essere usato.


Se

.size() fa il lavoro sulla tua pagina, assicurarsi che non si dispone di alcun librerie extra inclusi come prototipo che è pasticciare con ilArrayprototipo.

o

Potrebbero esserci alcuni plugin nel tuo browser che si confondono con il Arrayprototipo.


@BartFriederichs, sono a Chrome, ma è bene sapere MrGreen
Naftali aka Neal

Funziona in Chrome, non funziona in Firefox, tendo a utilizzare Chrome per le esigenze di debug, quindi sembra funzionare. Grazie per aver sottolineato la sua non esistenza.
Abraham P

9
Se funziona in Chrome per te, probabilmente c'è qualche libreria aggiuntiva che stai chiamando sulla tua pagina che lo aggiunge al prototipo di array.
Spike Williams,

1
Versione 23.0.1271.97 [] .size function size () {return this.length;} Quindi in realtà è solo un involucro attorno a .length ... Mi sento un po 'stupido ora ...
Abraham P

2
@AbrahamP, premi F12 su QUESTA pagina e digita [].sizela console. Se funziona, allora hai una sorta di Chrome Plugin che si confonde con il prototipo Array e sarei preoccupato. :)
aquinas

30

La .size()funzione è disponibile in Jquery e in molte altre librerie.

La .lengthproprietà funziona solo quando l'indice è un numero intero.

La lengthstruttura sarà lavorare con questo tipo di matrice:

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

La lengthproprietà non funziona con questo tipo di array:

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

Quindi nel tuo caso dovresti usare la .lengthproprietà.


C'è qualcosa che funziona con le stringhe se la dimensione non funziona?
Chris,

2
@Chris per array con chiavi di stringa, come pbooksopra, puoi usare $(pbook).size();[richiede jQuery]
brutto pasty

3
Perché dovresti mettere due spazi ovunque, però?
Post Self

19

.size() è di jQuery, molto probabilmente stai confondendo o prendendo da qualcun altro che aveva importato la libreria jQuery nel suo progetto.

Se avessi importato jQuery e scrivessi come $(array).size(), restituirebbe la lunghezza dell'array.


1
Molte biblioteche lo usano .size()non è solo jquery
Naftali aka Neal

15

array.length non è necessariamente il numero di elementi nell'array:

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

La lunghezza dell'array è uno in più dell'indice più alto.

Come affermato in precedenza Array.size()non è un metodo valido.

Maggiori informazioni


In pratica è il numero di articoli. La maggior parte degli interpreti JS riempirà le righe dell'array con indefinito. Nel tuo esempio, avrai 101 elementi nel tuo array con 97 elementi senza valore (non definito) ma ci sono elementi. Apparirà come: ['car1', 'car2', 'car3', undefined * 97, 'car100'] Se esegui il loop su questo array, la tua variabile di incremento avrà un valore di 101 dopo il loop.
ElJackiste,

D'altra parte, array.length non è necessariamente il numero di valori definiti (non assegnati) nell'array.
ElJackiste,

4

La proprietà 'lunghezza' restituisce (last_key + 1) per le matrici con tasti numerici:

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

stamperà 12!

Questo funzionerà:

var  nums  =  new  Array ();
nums [ 10 ]  =  10 ; 
nums [ 11 ]  =  11 ;
nums [ 12 ]  =  12 ;
log.info( nums.length + '  /  '+ Object.keys(nums).length );

Mentre questa è una risposta interessante, non sono del tutto sicuro che sia una risposta a questa domanda
OliverRadini,

L'OP chiedeva "Array.size () vs Array.length". Dalle discussioni precedenti, è stato chiarito che la funzione 'size' non fa parte di JavaScript standard ma implementata dalle librerie. Quindi suppongo che l'OP sia interessato a come recuperare la lunghezza reale degli array JavaScript. Sto scoprendo una 'caratteristica' poco conosciuta di JavaScript che può portare a comportamenti imprevisti, soprattutto perché il comportamento è diverso quando l'array contiene altri tipi di oggetti, come ad esempio le stringhe.
cskwg,


2

La dimensione rileva i duplicati, restituirà il numero di valori univoci

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

1

In realtà, .size()è il metodo JavaScript non puro, c'è una proprietà di accesso .sizedi Set oggetto che è un po 'assomiglia .size()ma non è un metodo di funzione, proprio come ho detto, si tratta di una proprietà di accesso di un oggetto Set per mostrare il numero unico di (unici) elementi in un oggetto Set.

La proprietà accessor size restituisce il numero di elementi (univoci) in un oggetto Set.

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

Ed lengthè una proprietà di un oggetto iterabile (array) che restituisce il numero di elementi in quell'array. Il valore è un numero intero a 32 bit senza segno che è sempre numericamente maggiore dell'indice più alto dell'array.

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

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

0

possiamo usare la proprietà .length per impostare o restituire il numero di elementi in un array. il valore di ritorno è un numero

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

possiamo .size nel caso in cui abbiamo bisogno di filtrare i valori duplicati e ottenere il conteggio degli elementi in un set.

const set = new set([1,1,2,1]); 
 console.log(set.size) ;`
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.