Array.size () vs Array.length


385

ความแตกต่างระหว่างสองคืออะไร?

ดังนั้นฉันจึงรู้ว่าarray.size()เป็นฟังก์ชั่นในขณะที่array.lengthเป็นทรัพย์สิน มี usecase สำหรับการใช้หนึ่งมากกว่าอีก? มีประสิทธิภาพมากกว่านี้ไหม (ฉันคิดว่า.lengthจะเร็วขึ้นอย่างมีนัยสำคัญเนื่องจากเป็นคุณสมบัติแทนที่จะเป็นวิธีการโทร) ทำไมหนึ่งจะเคยใช้ตัวเลือกที่ช้ากว่า? มีเบราว์เซอร์บางตัวที่เข้ากันไม่ได้กับอันใดอันหนึ่งหรือไม่?

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

จะพิมพ์:

  0, 0, true
  3, 3, true

63
คุณพบArray.size()วิธีใน JavaScript พื้นเมืองแล้วที่ไหน
VisioN

2
Chrome ไม่มี.size...
0x499602D2

1
@AbrahamP idk สิ่งที่ Chrome คอนโซลคุณใช้ ...
Naftali aka Neal


3
.size()มีแนวโน้มมาจากกรอบงานต้นแบบ
MikeM

คำตอบ:


535

Array.size () ไม่ใช่วิธีที่ถูกต้อง

ใช้คุณสมบัติความยาวเสมอ

มีไลบรารีหรือสคริปต์ที่เพิ่มเมธอดขนาดให้กับต้นแบบอาร์เรย์เนื่องจากนี่ไม่ใช่วิธีอาร์เรย์แบบเนทีฟ โดยทั่วไปจะทำเช่นนี้เพื่อเพิ่มการสนับสนุนสำหรับ getter แบบกำหนดเอง ตัวอย่างของการใช้สิ่งนี้คือเมื่อคุณต้องการให้ขนาดในหน่วยความจำของอาร์เรย์ (ซึ่งเป็นสิ่งเดียวที่ฉันคิดได้ว่าจะเป็นประโยชน์สำหรับชื่อนี้)

Underscore.js โชคไม่ดีที่กำหนดsizeวิธีการที่จะส่งกลับความยาวของวัตถุหรืออาร์เรย์ เนื่องจากน่าเสียดายที่คุณสมบัติความยาวของฟังก์ชันถูกกำหนดเป็นจำนวนอาร์กิวเมนต์ที่มีชื่อฟังก์ชันจึงประกาศว่าพวกเขาต้องใช้ทางเลือกและขนาดที่เลือก (นับจะเป็นตัวเลือกที่ดีกว่า)


154

.size()คือไม่ได้ฟังก์ชั่น JS พื้นเมืองArray(อย่างน้อยไม่ได้อยู่ในเบราว์เซอร์ใด ๆ ที่ฉันรู้)

.length ควรใช้


ถ้า

.size() ใช้งานได้บนหน้าเว็บของคุณตรวจสอบให้แน่ใจว่าคุณไม่มีไลบรารี่พิเศษใด ๆ รวมอยู่เช่นต้นแบบที่มีการลอกเลียนArrayแบบต้นแบบ

หรือ

อาจมีปลั๊กอินบางอย่างในเบราว์เซอร์ของคุณซึ่งมีการดัดแปลงกับArrayต้นแบบ


@BartFriederichs ดีฉันอยู่ใน Chrome แต่นั่นเป็นเรื่องดีที่จะรู้ :-D
Naftali aka Neal

มันใช้งานได้ใน Chrome ไม่ทำงานใน Firefox ฉันมักจะใช้ Chrome เพื่อแก้ไขข้อบกพร่องดังนั้นมันจึงใช้งานได้ ขอบคุณที่ชี้ให้เห็นว่ามันไม่มีตัวตน
อับราฮัม P

9
หากใช้งานได้ใน Chrome สำหรับคุณอาจมีห้องสมุดเพิ่มเติมบางส่วนที่คุณเรียกใช้บนหน้าเว็บของคุณซึ่งเพิ่มไปยังต้นแบบ Array
Spike Williams

1
รุ่น 23.0.1271.97 []. ขนาดฟังก์ชั่นขนาด () {return this.length;} จริง ๆ แล้วมันเป็นเพียงแค่เสื้อคลุมรอบ. ความยาว ... ฉันรู้สึกงี่เง่าตอนนี้ ...
Abraham P

2
@AbrahamP กด F12 ในหน้านี้และพิมพ์[].sizeในคอนโซล หากใช้งานได้แสดงว่าคุณมีปลั๊กอิน Chrome บางประเภทที่เลียนแบบต้นแบบของ Array และฉันก็จะเป็นห่วง :)
aquinas

30

.size()ฟังก์ชั่นที่มีอยู่ใน Jquery และห้องสมุดอื่น ๆ อีกมากมาย

.lengthคุณสมบัติทำงานเฉพาะเมื่อดัชนีเป็นจำนวนเต็ม

lengthคุณสมบัติประสงค์ทำงานร่วมกับประเภทของอาร์เรย์นี้:

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

lengthคุณสมบัติจะไม่ทำงานกับประเภทของอาร์เรย์นี้:

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

ดังนั้นในกรณีของคุณคุณควรใช้.lengthคุณสมบัตินี้


มีบางอย่างที่ใช้งานได้กับ Strings หรือไม่หากขนาดไม่ทำงาน
Chris

2
@Chris สำหรับอาร์เรย์ที่มีคีย์สตริงเช่นpbookด้านบนคุณสามารถใช้$(pbook).size();[ต้องการ jQuery]
pasty น่ารังเกียจ

3
ทำไมคุณถึงใส่ช่องว่างสองแห่งทุกแห่ง
โพสต์ด้วยตนเอง

19

.size() คือ jQuery อาจเป็นเพราะคุณสับสนหรือเอาไปจากคนอื่นที่นำเข้า jQuery ไลบรารี่มาที่โครงการของเขา

หากคุณนำเข้าjQueryและต้องการเขียน$(array).size()มันจะคืนค่าความยาวของอาร์เรย์


1
ห้องสมุดหลายแห่งใช้.size()ไม่ใช่แค่ jquery
Naftali aka Neal

15

array.length ไม่จำเป็นต้องเป็นจำนวนรายการในอาร์เรย์:

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

ความยาวของอาเรย์นั้นมากกว่าดัชนีสูงสุดหนึ่งตัว

ตามที่ระบุไว้ก่อนหน้าArray.size()นี้ไม่ใช่วิธีที่ถูกต้อง

ข้อมูลมากกว่านี้


ในทางปฏิบัติมันเป็นจำนวนรายการ ตัวแปล JS ส่วนใหญ่จะเติมแถวลำดับด้วยการไม่ได้กำหนด ในตัวอย่างของคุณคุณจะมี 101 องค์ประกอบในอาร์เรย์ของคุณกับ 97 องค์ประกอบโดยไม่มีค่า (ไม่ได้กำหนด) แต่มีองค์ประกอบอยู่ มันจะมีลักษณะ: ['car1', 'car2', 'car3', ไม่ได้กำหนด * 97, 'car100'] ถ้าคุณวนรอบอาร์เรย์นี้ตัวแปรเพิ่มของคุณจะมีค่า 101 หลังจากวนรอบ
ElJackiste

ในทางตรงกันข้าม array.length ไม่จำเป็นต้องเป็นจำนวนค่าที่กำหนด (ไม่ได้กำหนด) ในอาร์เรย์
ElJackiste

4

คุณสมบัติ 'length' ส่งคืน (last_key + 1) สำหรับอาร์เรย์ที่มีคีย์ตัวเลข:

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

จะพิมพ์ 12!

สิ่งนี้จะได้ผล:

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

ในขณะที่นี่เป็นคำตอบที่น่าสนใจฉันไม่แน่ใจว่าเป็นคำตอบสำหรับคำถามนี้หรือไม่
OliverRadini

OP กำลังถาม 'Array.size () vs Array.length' จากการสนทนาก่อนหน้านี้มันชัดเจนว่าฟังก์ชั่น 'ขนาด' ไม่ได้เป็นส่วนหนึ่งของ JavaScript มาตรฐาน แต่ถูกนำไปใช้งานโดยห้องสมุด ดังนั้นฉันสมมติว่า OP มีความสนใจในวิธีดึงความยาวจริงของอาร์เรย์ JavaScript ฉันเปิดเผย 'คุณสมบัติ' เล็กน้อยของ JavaScript ซึ่งอาจนำไปสู่พฤติกรรมที่ไม่คาดคิดโดยเฉพาะอย่างยิ่งพฤติกรรมที่แตกต่างกันเมื่ออาร์เรย์มีวัตถุประเภทอื่นเช่นสตริง
cskwg


2

ขนาดจะตรวจจับสิ่งที่ซ้ำกันมันจะคืนค่าจำนวนที่ไม่ซ้ำกัน

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

1

ที่จริงแล้ว.size()ไม่ใช่วิธีจาวาสคริปต์ที่บริสุทธิ์มีคุณสมบัติ accessor .sizeของSet object ที่มีลักษณะเล็กน้อย.size()แต่ไม่ใช่วิธีการใช้งานอย่างที่ผมพูดไปมันเป็นคุณสมบัติ accessor ของ Set object เพื่อแสดงจำนวนเฉพาะของ องค์ประกอบ (ไม่ซ้ำกัน) ในชุดวัตถุ

คุณสมบัติ accessor size ส่งคืนจำนวนองค์ประกอบ (เฉพาะ) ในชุดวัตถุ

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

และlengthเป็นคุณสมบัติของวัตถุ iterable (array) ที่คืนค่าจำนวนองค์ประกอบใน array นั้น ค่าเป็นจำนวนเต็ม 32 บิตที่ไม่ได้ลงนามซึ่งจะเป็นตัวเลขมากกว่าดัชนีสูงสุดในอาร์เรย์เสมอ

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

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

0

เราสามารถใช้คุณสมบัติ. lengthเพื่อกำหนดหรือคืนจำนวนองค์ประกอบในอาเรย์ ค่าส่งคืนเป็นตัวเลข

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

เราสามารถ. ขนาดในกรณีที่เราต้องการกรองค่าที่ซ้ำกันและได้รับการนับองค์ประกอบในชุด

const set = new set([1,1,2,1]); 
 console.log(set.size) ;`
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.