Array.size () so với Array.length


385

Sự khác biệt giữa hai là gì?

Vì vậy, tôi biết rằng đó array.size()là một chức năng trong khi array.lengthlà một tài sản. Có một usecase để sử dụng cái này hơn cái kia không? Là một hiệu quả hơn? (Tôi sẽ tưởng tượng .lengthlà nhanh hơn đáng kể vì nó là một thuộc tính chứ không phải là một cuộc gọi phương thức?) Tại sao người ta sẽ sử dụng tùy chọn chậm hơn? Có một số trình duyệt không tương thích với cái này hay cái kia không?

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

Sẽ in:

  0, 0, true
  3, 3, true

63
Bạn đã tìm thấy Array.size()phương thức nào trong JavaScript gốc?
VisioN

2
Chrome không có .size...
0x499602D2

1
@AbrahamP idk bạn đang sử dụng bảng điều khiển Chrome nào ...
Naftali aka Neal


3
.size()có khả năng từ khung Prototype: prototypejs.org/doc/latest/language/Array/prototype/size
MikeM

Câu trả lời:


535

Array.size () không phải là một phương thức hợp lệ

Luôn sử dụng thuộc tính chiều dài

Có một thư viện hoặc tập lệnh thêm phương thức kích thước vào nguyên mẫu mảng vì đây không phải là phương thức mảng gốc. Điều này thường được thực hiện để thêm hỗ trợ cho một getter tùy chỉnh. Một ví dụ về việc sử dụng điều này sẽ là khi bạn muốn lấy kích thước trong bộ nhớ của một mảng (đó là điều duy nhất tôi có thể nghĩ rằng nó sẽ hữu ích cho tên này).

Không may Underscore.js định nghĩa một sizephương thức thực sự trả về độ dài của một đối tượng hoặc mảng. Vì không may, thuộc tính độ dài của hàm được định nghĩa là số lượng đối số được đặt tên mà hàm khai báo chúng phải sử dụng thay thế và kích thước đã được chọn (số đếm sẽ là lựa chọn tốt hơn).


154

.size()không một hàm JS người gốc Array(ít nhất là không phải trong bất kỳ trình duyệt mà tôi biết).

.length nên được sử dụng.


Nếu

.size() không hoạt động trên trang của bạn, hãy đảm bảo rằng bạn không có bất kỳ thư viện bổ sung nào được bao gồm như nguyên mẫu đang lột xác vớiArraynguyên mẫu.

hoặc là

Có thể có một số plugin trên trình duyệt của bạn đang mucking với Arraynguyên mẫu.


@BartFriederichs Tôi cũng đang ở trong Chrome, nhưng thật tốt khi biết :-D
Naftali aka Neal

Nó KHÔNG hoạt động trong Chrome, không hoạt động trong Firefox, tôi có xu hướng sử dụng Chrome cho nhu cầu gỡ lỗi để nó có vẻ hoạt động. Cảm ơn đã chỉ ra sự không tồn tại của nó.
Áp-ra-ham P

9
Nếu nó hoạt động trong Chrome cho bạn, có thể có một số thư viện bổ sung mà bạn đang gọi trên trang của mình để thêm nó vào nguyên mẫu Array.
Spike Williams

1
Phiên bản 23.0.1271.97 [] .size chức năng kích thước () {return this.length;} Vì vậy, trên thực tế nó chỉ là một wrapper quanh .length ... Tôi kinda cảm thấy ngu ngốc bây giờ ...
Abraham P

2
@AbrahamP, nhấn F12 trên trang NÀY và nhập [].sizevào bảng điều khiển. Nếu nó hoạt động, thì bạn có một số Plugin Chrome đang hoạt động với nguyên mẫu Array và tôi sẽ lo lắng. :)
thủy cung

30

Các .size()chức năng có sẵn trong Jquery và nhiều thư viện khác.

Các .lengthbất động sản chỉ hoạt động khi chỉ số là một số nguyên.

Các lengthbất động sản sẽ làm việc với loại hình này của mảng:

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

Các lengthbất động sản sẽ không làm việc với loại hình này của mảng:

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

Vì vậy, trong trường hợp của bạn, bạn nên sử dụng .lengthtài sản.


Có cái gì đó hoạt động với String nếu kích thước không hoạt động?
Chris

2
@Chris cho các mảng có khóa chuỗi, chẳng hạn như pbookở trên, bạn có thể sử dụng $(pbook).size();[yêu cầu jQuery]
pasty khó chịu

3
Tại sao bạn lại đặt hai không gian ở khắp mọi nơi?
Tự đăng

19

.size() là của jQuery, rất có thể bạn đang nhầm lẫn hoặc lấy từ một người khác đã nhập thư viện jQuery vào dự án của mình.

Nếu bạn đã nhập jQuery và bạn viết như thế $(array).size(), nó sẽ trả về độ dài mảng.


1
Nhiều thư viện sử dụng .size()nó không chỉ là jquery
Naftali aka Neal

15

array.length không nhất thiết là số lượng các mục trong mảng:

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

Độ dài của mảng là nhiều hơn chỉ số cao nhất.

Như đã nêu trước đây Array.size()không phải là một phương pháp hợp lệ.

Thêm thông tin


Trong thực tế nó là số lượng các mặt hàng. Hầu hết các trình thông dịch JS sẽ điền vào các hàng mảng không xác định. Trong ví dụ của bạn, bạn sẽ có 101 phần tử trong mảng với 97 phần tử không có giá trị (không xác định) nhưng các phần tử nằm ở đó. Nó sẽ trông giống như: ['car1', 'car2', 'car3', không xác định * 97, 'car100'] Nếu bạn lặp trên mảng này, biến tăng của bạn sẽ có giá trị 101 sau vòng lặp.
ElJackiste

Mặt khác, Array.length không nhất thiết là số lượng giá trị được xác định (không được gán) trong mảng.
ElJackiste

4

Thuộc tính 'length' trả về (last_key + 1) cho các mảng có các phím số:

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

sẽ in 12!

Điều này sẽ làm việc:

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

Mặc dù đây là một câu trả lời thú vị, tôi không hoàn toàn chắc chắn đó là câu trả lời cho câu hỏi này
OliverRadini

OP đã hỏi 'Array.size () so với Array.length'. Từ các cuộc thảo luận trước đây, rõ ràng là Hàm 'kích thước' không phải là một phần của JavaScript tiêu chuẩn mà được các thư viện triển khai. Vì vậy, tôi giả định rằng OP quan tâm đến cách truy xuất độ dài thực của các mảng JavaScript. Tôi đang phát hiện ra một 'tính năng' ít được biết đến của JavaScript, điều này có thể dẫn đến hành vi không mong muốn, đặc biệt là khi hành vi khác nhau khi mảng chứa các loại đối tượng khác, như chuỗi chẳng hạn.
cskwg


2

Kích thước phát hiện trùng lặp, nó sẽ trả về số lượng giá trị duy nhất

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

1

Trên thực tế, .size()không phải là phương thức JavaScript thuần túy, có một .sizethuộc tính truy cập của đối tượng Set trông hơi giống .size()nhưng nó không phải là một phương thức hàm, như tôi đã nói, nó là một thuộc tính truy cập của đối tượng Set để hiển thị số lượng duy nhất của (duy nhất) các phần tử trong một đối tượng Set.

Thuộc tính accessor size trả về số lượng phần tử (duy nhất) trong một đối tượng 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

lengthlà một thuộc tính của một đối tượng lặp (mảng) trả về số lượng phần tử trong mảng đó. Giá trị là số nguyên 32 bit không dấu, luôn luôn lớn hơn chỉ số cao nhất trong mảng.

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

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

0

chúng ta có thể sử dụng thuộc tính .length để đặt hoặc trả về số phần tử trong một mảng. giá trị trả về là một số

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

chúng tôi có thể bạn. kích thước trong trường hợp chúng tôi cần lọc các giá trị trùng lặp và lấy số lượng phần tử trong một bộ.

const set = new set([1,1,2,1]); 
 console.log(set.size) ;`
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.