Array.size () vs Array.length

385

Quelle est la différence entre les deux?

Je sais donc que array.size()c'est une fonction tandis que array.lengthc'est une propriété. Existe-t-il un cas d'utilisation pour utiliser l'un sur l'autre? Est-ce que l'on est plus efficace? (J'imagine .lengthque c'est beaucoup plus rapide car c'est une propriété plutôt qu'un appel de méthode?) Pourquoi utiliserait-on jamais l'option plus lente? Y a-t-il des navigateurs incompatibles avec l'un ou l'autre?

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

Imprime:

  0, 0, true
  3, 3, true
Abraham P
la source
63
Où avez-vous trouvé la Array.size()méthode en JavaScript natif?
VisioN
2
Chrome n'a pas .size...
0x499602D2
1
@AbrahamP idk quelle console Chrome vous utilisez ...
Naftali aka Neal
3
.size()provient probablement du framework Prototype: prototypejs.org/doc/latest/language/Array/prototype/size
MikeM

Réponses:

535

Array.size () n'est pas une méthode valide

Utilisez toujours la propriété length

Il existe une bibliothèque ou un script ajoutant la méthode de taille au prototype de tableau car il ne s'agit pas d'une méthode de tableau natif. Cette opération est généralement effectuée pour ajouter la prise en charge d'un getter personnalisé. Un exemple d'utilisation serait lorsque vous souhaitez obtenir la taille en mémoire d'un tableau (ce qui est la seule chose à laquelle je pense qui serait utile pour ce nom).

Underscore.js définit malheureusement une sizeméthode qui retourne réellement la longueur d'un objet ou d'un tableau. Étant donné que, malheureusement, la propriété length d'une fonction est définie comme le nombre d'arguments nommés, la fonction déclare qu'elle devait utiliser une alternative et que la taille a été choisie (compter aurait été un meilleur choix).

Gabriel
la source
154

.size()n'est pas une fonction JS native de Array(du moins pas dans les navigateurs que je connaisse).

.length doit être utilisé.


Si

.size() ne fonctionne pas sur votre page, assurez-vous que vous n'avez pas de bibliothèques supplémentaires incluses comme un prototype qui déblaye avec leArray prototype.

ou

Il peut y avoir un plugin sur votre navigateur qui débloque le Arrayprototype.

Naftali aka Neal
la source
@BartFriederichs bien je suis dans Chrome, mais c'est bon à savoir :-D
Naftali aka Neal
Cela FONCTIONNE dans Chrome, ne fonctionne pas dans Firefox, j'ai tendance à utiliser Chrome pour les besoins de débogage, donc cela semble fonctionner. Merci d'avoir signalé sa non-existence.
Abraham P
9
Si cela fonctionne dans Chrome pour vous, il y a probablement une bibliothèque supplémentaire que vous appelez sur votre page qui l'ajoute au prototype Array.
Spike Williams
1
Version 23.0.1271.97 [] .size function size () {return this.length;} Donc en fait, c'est juste un wrapper autour de .length ... Je me sens un peu stupide maintenant ...
Abraham P
2
@AbrahamP, appuyez sur F12 sur CETTE page et tapez [].sizedans la console. Si cela fonctionne, alors vous avez une sorte de plugin Chrome qui débloque le prototype Array, et je serais inquiet. :)
aquinas
30

le .size() fonction est disponible dans Jquery et de nombreuses autres bibliothèques.

le .length propriété ne fonctionne que lorsque l'index est un entier.

La lengthpropriété sera travailler avec ce type de tableau:

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

La lengthpropriété ne fonctionnera pas avec ce type de tableau:

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

Donc, dans votre cas, vous devriez utiliser la .lengthpropriété.

Saurabh Chandra Patel
la source
Y a-t-il quelque chose qui fonctionne avec les chaînes si la taille ne fonctionne pas?
Chris
2
@Chris pour les tableaux avec des clés de chaîne, comme pbookci-dessus, vous pouvez utiliser $(pbook).size();[requiert jQuery]
méchant pâteux
3
Pourquoi voudriez-vous mettre deux espaces partout, cependant?
Post Self
19

.size() appartient à jQuery, il est fort probable que vous soyez confus ou que vous ayez pris quelqu'un d'autre qui avait importé la bibliothèque jQuery dans son projet.

Si jQuery était importé et que vous écriviez comme $(array).size()cela, il retournerait la longueur du tableau.

Julio Flores
la source
1
De nombreuses bibliothèques l'utilisent .size()non seulement jquery
Naftali aka Neal
15

array.length n'est pas nécessairement le nombre d'éléments dans le tableau:

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

La longueur du tableau est un de plus que l'indice le plus élevé.

Comme indiqué précédemment, ce Array.size()n'est pas une méthode valide.

Plus d'information

user2811108
la source
En pratique, c'est le nombre d'articles. La plupart des interpréteurs JS remplissent les lignes du tableau avec undefined. Dans votre exemple, vous aurez 101 éléments dans votre tableau avec 97 éléments sans valeur (non défini) mais les éléments sont là. Cela ressemblera à: ['car1', 'car2', 'car3', undefined * 97, 'car100'] Si vous bouclez sur ce tableau, votre variable d'incrémentation vaudra 101 après la boucle.
ElJackiste
D'un autre côté, array.length n'est pas nécessairement le nombre de valeurs définies (non affectées) dans le tableau.
ElJackiste
4

La propriété 'length' renvoie le (last_key + 1) pour les tableaux avec des touches numériques:

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

imprimera 12!

Cela fonctionnera:

var  nums  =  new  Array ();
nums [ 10 ]  =  10 ; 
nums [ 11 ]  =  11 ;
nums [ 12 ]  =  12 ;
log.info( nums.length + '  /  '+ Object.keys(nums).length );
cskwg
la source
Bien que ce soit une réponse intéressante, je ne suis pas complètement sûr que ce soit une réponse à cette question
OliverRadini
L'OP demandait «Array.size () vs Array.length». Il ressort clairement des discussions précédentes que la fonction «taille» ne fait pas partie du JavaScript standard mais est mise en œuvre par les bibliothèques. Je suppose donc que l'OP s'intéresse à la façon de récupérer la longueur réelle des tableaux JavaScript. Je découvre une `` fonctionnalité '' peu connue de JavaScript qui peut conduire à un comportement inattendu, d'autant plus que le comportement est différent lorsque le tableau contient d'autres types d'objets, comme des chaînes, par exemple.
cskwg
2

La taille détecte les doublons, elle renverra le nombre de valeurs uniques

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

En fait, ce .size()n'est pas une méthode JavaScript pure, il y a une propriété d'accesseur .sizede l' objet Set qui ressemble un peu .size()mais ce n'est pas une méthode de fonction, comme je l'ai dit, c'est une propriété d'accesseur d'un objet Set pour montrer le nombre unique de éléments (uniques) dans un objet Set.

La propriété accesseur de taille renvoie le nombre d'éléments (uniques) dans un objet 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

Et lengthest une propriété d'un objet (tableau) itérable qui renvoie le nombre d'éléments dans ce tableau. La valeur est un entier non signé de 32 bits qui est toujours numériquement supérieur à l'index le plus élevé du tableau.

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

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

nous pouvons utiliser la propriété .length pour définir ou renvoyer le nombre d'éléments dans un tableau. la valeur de retour est un nombre

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

nous pouvons vous .size au cas où nous aurions besoin de filtrer les valeurs en double et d'obtenir le nombre d'éléments dans un ensemble.

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