Array.size () проти Array.length


385

Яка різниця між ними?

Так я це знаю array.size() функція в той час array.lengthяк властивість. Чи є шафа для використання одного над іншим? Є один більш ефективний? (Я б міг уявити, .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()ймовірно, з Prototype Framework: prototypejs.org/doc/latest/language/Array/prototype/size
MikeM

Відповіді:


535

Array.size () не є дійсним методом

Завжди використовуйте властивість довжини

Існує бібліотека або скрипт, що додає метод розміру до прототипу масиву, оскільки це не метод власного масиву. Зазвичай це робиться для того, щоб додати підтримку користувальницьким користувачем. Прикладом використання цього є те, коли ви хочете отримати розмір у пам'яті масиву (це єдине, що я можу подумати, що було б корисно для цього імені).

Underscore.js, на жаль, визначає sizeметод, який фактично повертає довжину об'єкта або масиву. Оскільки, на жаль, властивість довжини функції визначається як кількість названих аргументів, функція заявляє, що їм довелося використовувати альтернативу, і був обраний розмір (підрахунок був би кращим вибором).


154

.size()це НЕ рідна функція JS з Array(по крайней мере , не в будь-якому браузері , який я знаю).

.length слід використовувати.


Якщо

.size() чи працює на вашій сторінці, переконайтеся, що у вас немає додаткових бібліотек, як-от прототип, який спілкується зArrayпрототипом.

або

У вашому браузері може бути якийсь плагін, який зв’язується з Arrayпрототипом.


@BartFriederichs добре, я перебуваю в Chrome, але це добре знати :-D
Naftali aka Neal

Він працює в Chrome, не працює в Firefox, я схильний використовувати Chrome для налагодження потреб, так що, здавалося, він працює. Дякуємо, що вказали на його відсутність.
Авраам P

9
Якщо він працює в Chrome для вас, напевно, на вашій сторінці є виклик додаткової бібліотеки, яка додає його до прототипу Array.
Спайк Вільямс

1
Версія 23.0.1271.97 []. Розмір функції розмір () {return this.length;} Тож насправді це просто обгортка навколо. Довжини ... Я ніби зараз почуваюся дурним ...
Авраам P

2
@AbrahamP, натисніть F12 на цій сторінці та введіть [].sizeконсоль. Якщо це працює, то у вас є якийсь Chrome Plugin, який перебуває в роботі з прототипом Array, і я б переживав. :)
Аквінський

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, якщо розмір не працює?
Кріс,

2
@Chris для масивів зі строковими клавішами, такими як pbookвище, ви можете використовувати $(pbook).size();[вимагає jQuery]
противно пасти

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', undefined * 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

ОП запитувала "Array.size () vs Array.length". З попередніх дискусій було зрозуміло, що функція "розмір" не є частиною стандартного JavaScript, а реалізована бібліотеками. Тож я припускаю, що ОП зацікавлений у тому, як отримати реальну довжину масивів 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()це не чистий метод JavaScript, є збруя властивість .sizeз Set об'єкта , який трохи скидається , .size()але це не метод функції, так само , як я вже сказав, це збруя властивість Set об'єкта , щоб показати унікальний номер (унікальні) елементи в об'єкті Set.

Властивість accessor size розміром повертає кількість (унікальних) елементів у об'єкті 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

І lengthє властивістю ітерабельного об'єкта (масиву), який повертає кількість елементів у цьому масиві. Значення - це непідписане, 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

ми можемо вам .size у випадку, якщо нам потрібно буде фільтрувати повторювані значення та отримувати кількість елементів у наборі.

const set = new set([1,1,2,1]); 
 console.log(set.size) ;`
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.