Array.size () vs Array.length

385

Apa perbedaan keduanya?

Jadi saya tahu itu array.size()adalah fungsi sementara array.lengthadalah properti. Apakah ada usecase untuk menggunakan satu di atas yang lain? Apakah yang lebih efisien? (Saya akan membayangkan .lengthuntuk secara signifikan lebih cepat karena ini adalah properti daripada pemanggilan metode?) Mengapa seseorang akan menggunakan opsi lebih lambat? Apakah ada beberapa browser yang tidak kompatibel dengan satu atau yang lain?

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

Akan dicetak:

  0, 0, true
  3, 3, true
Abraham P
sumber
63
Di mana Anda menemukan Array.size()metode dalam JavaScript asli?
VisioN
2
Chrome tidak punya .size...
0x499602D2
1
@AbrahamP idk konsol Chrome apa yang Anda gunakan ...
Naftali alias Neal
3
.size()kemungkinan dari kerangka Prototipe: prototypejs.org/doc/latest/language/Array/prototype/size
MikeM

Jawaban:

535

Array.size () bukan metode yang valid

Selalu gunakan properti panjang

Ada perpustakaan atau skrip yang menambahkan metode ukuran ke prototipe array karena ini bukan metode array asli. Ini biasanya dilakukan untuk menambahkan dukungan untuk pengambil kustom. Contoh penggunaan ini adalah ketika Anda ingin mendapatkan ukuran dalam memori array (yang merupakan satu-satunya hal yang dapat saya pikirkan yang akan berguna untuk nama ini).

Sayangnya underscore.js mendefinisikan sizemetode yang sebenarnya mengembalikan panjang suatu objek atau array. Karena sayangnya properti panjang fungsi didefinisikan sebagai jumlah argumen bernama fungsi menyatakan mereka harus menggunakan alternatif dan ukuran dipilih (jumlah akan menjadi pilihan yang lebih baik).

Gabriel
sumber
154

.size()adalah tidak fungsi JS asli Array(setidaknya tidak di browser yang saya tahu).

.length harus digunakan.


Jika

.size() tidak berfungsi pada halaman Anda, pastikan Anda tidak memiliki perpustakaan tambahan termasuk seperti prototipe yang mucking denganArrayprototipe.

atau

Mungkin ada beberapa plugin di browser Anda yang sedang mengotot dengan Arrayprototipe.

Naftali alias Neal
sumber
@ BartFriederichs baik saya di Chrome, tapi itu baik untuk diketahui :-D
Naftali alias Neal
Tidak berfungsi di Chrome, tidak bekerja di Firefox, saya cenderung menggunakan Chrome untuk kebutuhan debugging sehingga tampaknya berfungsi. Terima kasih telah menunjukkan ketidakberadaannya.
Abraham P
9
Jika berfungsi di Chrome untuk Anda, mungkin ada beberapa perpustakaan tambahan yang Anda panggil di halaman Anda yang menambahkannya ke prototipe Array.
Spike Williams
1
Versi 23.0.1271.97 [] .size ukuran fungsi () {kembalikan this.length;} Jadi sebenarnya ini hanya pembungkus di sekitar .length ... Saya agak merasa bodoh sekarang ...
Abraham P
2
@AbrahamP, tekan F12 pada halaman INI, dan ketik [].sizekonsol. Jika berhasil, maka Anda memiliki semacam Plugin Chrome yang sedang mucking dengan prototipe Array, dan saya akan khawatir. :)
aquinas
30

The .size()Fungsi tersedia dalam Jquery dan banyak perpustakaan lainnya.

The .lengthproperti bekerja hanya ketika indeks adalah bilangan bulat.

The lengthproperti akan bekerja dengan jenis array:

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

The lengthproperti tidak akan bekerja dengan jenis array:

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

Jadi dalam kasus Anda, Anda harus menggunakan .length properti.

Saurabh Chandra Patel
sumber
Adakah sesuatu yang berfungsi dengan string jika ukuran tidak berfungsi?
Chris
2
@Chris untuk array dengan kunci string, seperti di pbookatas, Anda dapat menggunakan $(pbook).size();[memerlukan jQuery]
pasty jahat
3
Namun, mengapa Anda menempatkan dua ruang di mana-mana?
Poskan Diri
19

.size() adalah jQuery, mungkin Anda bingung atau mengambil dari orang lain yang telah mengimpor perpustakaan jQuery ke proyeknya.

Jika Anda ingin jQuery diimpor dan Anda akan menulis suka $(array).size(), itu akan mengembalikan panjang array.

Julio Flores
sumber
1
Banyak perpustakaan menggunakannya .size()bukan hanya jquery
Naftali alias Neal
15

array.length belum tentu jumlah item dalam array:

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

Panjang array lebih dari satu indeks tertinggi.

Seperti yang dinyatakan sebelumnya Array.size() bukan metode yang valid.

Informasi lebih lanjut

pengguna2811108
sumber
Dalam praktiknya itu adalah jumlah item. Sebagian besar interpreter JS akan mengisi baris array dengan undefined. Dalam contoh Anda, Anda akan memiliki 101 elemen dalam array Anda dengan 97 elemen tanpa nilai (tidak ditentukan) tetapi elemen ada di sana. Akan terlihat seperti: ['car1', 'car2', 'car3', undefined * 97, 'car100'] Jika Anda mengulang pada array ini, variabel kenaikan Anda akan bernilai 101 setelah loop.
ElJackiste
Di sisi lain, array.length belum tentu jumlah nilai yang ditentukan (tidak ditugaskan) dalam array.
ElJackiste
4

Properti 'length' mengembalikan (last_key + 1) untuk array dengan kunci numerik:

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

akan mencetak 12!

Ini akan berhasil:

var  nums  =  new  Array ();
nums [ 10 ]  =  10 ; 
nums [ 11 ]  =  11 ;
nums [ 12 ]  =  12 ;
log.info( nums.length + '  /  '+ Object.keys(nums).length );
cskwg
sumber
Meskipun ini adalah jawaban yang menarik, saya tidak sepenuhnya yakin itu adalah jawaban untuk pertanyaan ini
OliverRadini
OP bertanya 'Array.size () vs Array.length'. Dari diskusi sebelumnya, itu menjadi jelas, bahwa Fungsi 'ukuran' bukan bagian dari JavaScript standar tetapi diimplementasikan oleh perpustakaan. Jadi saya berasumsi bahwa OP tertarik pada cara mengambil panjang sebenarnya dari array JavaScript. Saya mengungkap sedikit 'fitur' JavaScript yang dapat menyebabkan perilaku tak terduga, terutama karena perilaku berbeda ketika array berisi jenis objek lain, seperti string, misalnya.
cskwg
2

Ukuran mendeteksi duplikat, itu akan mengembalikan jumlah nilai unik

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

Sebenarnya, .size()ini bukan metode JavaScript murni, ada properti accessor .sizedari objek Set yang sedikit mirip .size()tapi itu bukan metode fungsi, seperti yang saya katakan, ini adalah properti accessor dari objek Set untuk menunjukkan jumlah unik elemen (unik) dalam objek Set.

Properti accessor ukuran atau mengembalikan jumlah elemen (unik) dalam objek 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

Dan lengthadalah properti dari objek iterable (array) yang mengembalikan jumlah elemen dalam array itu. Nilainya adalah bilangan bulat 32-bit yang tidak ditandatangani yang selalu lebih besar secara numerik daripada indeks tertinggi dalam array.

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

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

kita bisa menggunakan properti .length untuk mengatur atau mengembalikan jumlah elemen dalam array. nilai kembali adalah angka

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

kita bisa .size jika kita perlu memfilter nilai duplikat dan mendapatkan jumlah elemen dalam satu set.

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