Array.size () vs Array.length


385

İkisi arasındaki fark nedir?

Bu array.size()bir özellik iken array.lengthbir özellik olduğunu biliyorum . Birini diğerinin üzerinde kullanmak için bir kullanım alanı var mı? Bir tane daha verimli mi? ( .lengthBir yöntem çağrısı yerine bir özellik olduğu için önemli ölçüde daha hızlı hayal edebiliyorum ?) Neden hiç yavaş seçeneği kullanmak? Biri veya diğeri ile uyumsuz bazı tarayıcılar var mı?

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

Yazdırılacak:

  0, 0, true
  3, 3, true

63
Array.size()Yerel JavaScript'te yöntemi nereden buldunuz ?
VisioN

2
Chrome'da .size...
0x499602D2

1
@AbrahamP idk kullandığınız Chrome konsolunu ...
Naftali aka Neal


3
.size()büyük olasılıkla Prototip çerçevesinden geliyor: prototypejs.org/doc/latest/language/Array/prototype/size
MikeM

Yanıtlar:


535

Array.size () geçerli bir yöntem değil

Her zaman length özelliğini kullanın

Yerel bir dizi yöntemi olmadığından dizi yöntemine boyut yöntemini ekleyen bir kütüphane veya komut dosyası vardır. Bu genellikle özel bir alıcıya destek eklemek için yapılır. Bunu kullanmanın bir örneği, bir dizinin belleğindeki boyutu almak istediğinizde olabilir (ki bu isim için yararlı olacağını düşünebileceğim tek şey).

Underscore.js maalesef sizeaslında bir nesnenin veya dizinin uzunluğunu döndüren bir yöntem tanımlar . Ne yazık ki bir işlevin length özelliği, işlevin bir alternatif kullanmaları gerektiğini bildiren adlandırılmış bağımsız değişkenlerin sayısı olarak tanımlandığından ve boyut seçildi (sayı daha iyi bir seçim olurdu).


154

.size()olduğu değil bir yerli JS işlevi Array(en azından değil Bildiğim kadarıyla herhangi bir tarayıcıda).

.length gerektiğini kullanılan ol.


Eğer

.size() yapar sayfanızda çalışmalarını emin gibi dahil herhangi bir ekstra kütüphaneleri yok yapmak prototip ile mucking olanArrayprototip.

veya

Tarayıcınızda Arrayprototiple uğraşan bir eklenti olabilir .


@BartFriederichs iyi Chrome'dayım, ama bunu bilmek güzel:
Naftali aka Neal

Chrome'da çalışıyor, Firefox'ta çalışmıyor, Chrome'u hata ayıklama ihtiyaçları için kullanma eğilimindeyim, bu yüzden işe yaradı. Var olmadığını belirttiğiniz için teşekkürler.
Abraham P

9
Chrome'da sizin için çalışıyorsa, sayfanızda aradığınız ve onu Array prototipine ekleyen bazı ek kitaplıklar olabilir.
Spike Williams

1
Sürüm 23.0.1271.97 [] .size işlev boyutu () {dönüş this.length;} Yani aslında sadece .length etrafında bir sarıcı ... Şimdi kendimi aptal hissediyorum ...
Abraham P

2
@AbrahamP, BU sayfada F12 tuşuna basın [].sizeve konsolu yazın. Çalışırsa, Array prototipi ile dalgalanan bir çeşit Chrome Eklentisine sahipsiniz ve endişeleniyorum. :)
aquinas

30

.size()Fonksiyon jQuery ve diğer birçok kütüphanelerde mevcuttur.

.lengthEndeks bir tam sayıdır yalnızca mülkiyet çalışır.

lengthMülkiyet edecek dizinin bu tip çalışmak:

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

lengthMülkiyet olmaz dizinin bu tip çalışmak:

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

Yani sizin durumunuzda .lengthözelliği kullanıyor olmalısınız .


Boyut işe yaramazsa Dizelerle çalışan bir şey var mı?
Chris

2
@ pbookYukarıdaki gibi dize tuşlarına sahip diziler için Chris , $(pbook).size();[jQuery gerektirir] kullanabilirsiniz
kötü macun

3
Peki neden her yere iki boşluk koyuyorsun?
Post Self

19

.size() jQuery's, büyük olasılıkla jQuery kütüphanesini projesine ithal eden biriyle karıştırıyorsunuz veya başka birinden alıyorsunuz.

Eğer öyle şeyler yapsa jQuery ithal ve gibi yazmak istiyorum $(array).size(), bu dizi uzunluğunu dönecekti.


1
Birçok kütüphane .size()sadece jquery değil
Naftali aka Neal

15

array.length dizideki öğelerin sayısı olmayabilir:

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

Dizinin uzunluğu en yüksek dizinden bir tane daha.

Daha önce belirtildiği gibi Array.size()geçerli bir yöntem değildir.

Daha fazla bilgi


Uygulamada öğe sayısıdır. Çoğu JS yorumlayıcısı dizi satırlarını tanımsız ile doldurur. Örneğin, dizinizde değer içermeyen (tanımsız) 97 öğeyle 101 öğeniz olacak, ancak öğeler var. Şuna benzer olacaktır: ['car1', 'car2', 'car3', undefined * 97, 'car100'] Bu dizide döngü yaparsanız, artış değişkeniniz döngüden sonra 101 değerini alır.
ElJackiste

Öte yandan, array.length, dizideki tanımlı (atanmamış) değerlerin sayısı olmayabilir.
ElJackiste

4

'Length' özelliği, sayısal tuşlara sahip diziler için (last_key + 1) değerini döndürür:

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

12 yazdıracak!

Bu çalışacak:

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

Bu ilginç bir cevaptır iken, tamamen emin bir cevap bu değilim bu soruya
OliverRadini

OP 'Array.size () ve Array.length'i soruyordu. Önceki tartışmalarda, 'size' Fonksiyonunun standart JavaScript'in bir parçası olmadığı, ancak kütüphaneler tarafından uygulandığı açıktı. Bu yüzden OP'nin JavaScript dizilerinin gerçek uzunluğunu nasıl alacağına ilgi duyduğunu varsayıyorum. Özellikle dizi, örneğin dizeler gibi diğer nesne türlerini içerdiğinde davranış farklı olduğu için beklenmedik davranışlara yol açabilen JavaScript'in az bilinen bir 'özelliğini' açığa çıkarıyorum.
cskwg


2

Boyut yinelenenleri algılar, benzersiz değerlerin sayısını döndürür

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

1

Aslında, .size()saf JavaScript yöntemi değil .size, Set nesnesinin biraz benzeyen bir erişimci özelliği var, .size()ancak dediğim gibi, bir işlev yöntemi değil, dediğim gibi, bir dizi nesnesinin bir erişimci özelliği Set nesnesindeki (benzersiz) öğeler.

Size accessor özelliği, bir Set nesnesindeki (benzersiz) öğelerin sayısını döndürür.

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

Ve lengthbu dizideki öğelerin sayısını döndüren yinelenebilir bir nesnenin (dizi) bir özelliğidir. Değer, her zaman sayısal olarak dizideki en yüksek dizinden büyük olan işaretsiz, 32 bitlik bir tam sayıdır.

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

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

0

bir dizideki öğe sayısını ayarlamak veya döndürmek için .length özelliğini kullanabilirsiniz . dönüş değeri bir sayıdır

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

yinelenen değerleri filtrelememiz ve bir kümedeki öğelerin sayısını almamız gerektiğinde .size yapabiliriz.

const set = new set([1,1,2,1]); 
 console.log(set.size) ;`
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.