21

Re: Двовимірний масив

В 18 пості ви кажете,що mas.length це кількість елементів,що не є правдою.

22 Востаннє редагувалося quez (09.02.2015 21:00:27)

Re: Двовимірний масив

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

23

Re: Двовимірний масив

VTrim написав:

В 18 пості ви кажете,що mas.length це кількість елементів,що не є правдою.

Так, я не знав що length виводить максимальне ціле значення + 1, а тому я написав це справді помилково, але я доводжу вам не це...

24

Re: Двовимірний масив

думаю це поставить крапку в нашій суперечці:

var mas = [];
mas[0] = 'test0';
mas[2] = 'test2';
mas[3] = 'test3';
mas[7] = 'test7';

console.log(mas.slice(5))

Функція slice(begin[, end]) витягує з масиву значення починаючи з певного елемента. Якщо б у наведеному масиві було всього 4 елементи, то вона б нічого не повернула.

Теорему доведено. =)

25

Re: Двовимірний масив

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

26

Re: Двовимірний масив

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

Коли ви почнете розуміти устрій інтерпретаторів, то кинете PHP, тож не переймайтесь дрібницями.

27

Re: Двовимірний масив

0xDADA11C7 написав:

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

Коли ви почнете розуміти устрій інтерпретаторів, то кинете PHP, тож не переймайтесь дрібницями.

Я в загальному розумію як працює інтерпретатор PHP. Для вас кожна мова,яка працює через інтерпретатор,це шлак?

28

Re: Двовимірний масив

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

var mas = [];
mas["one"] = 'test0';
mas["two"] = 'test2';
mas["three"] = 'test3';
mas["seven"] = 'test7';

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

29

Re: Двовимірний масив

0xDADA11C7 написав:

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

var mas = [];
mas["one"] = 'test0';
mas["two"] = 'test2';
mas["three"] = 'test3';
mas["seven"] = 'test7';

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

А в вашому прикладі є якась неоптимальність? console.log(mas) виводить пустий масив, а якщо використати числові індекси, то виводить масив з дірками. Чи може я неправильно дивлюсь?

30

Re: Двовимірний масив

Всі елементи масиву можна дізнатися за допомогою функції arr.forEach(callback[, thisArg]) Неоптимізованого в моєму прикладі нема, бо нема його застосування деінде.

31

Re: Двовимірний масив

Взагалі-то автору я створив двомірний асоціативний масив.
ktretyak же до чогось (не зрозуміло до чого) почав стверджувати,що масив з невпорядкованими числовими індексами взагалі не можна створити. Але ж можна. Хоч це і не оптимально.

32

Re: Двовимірний масив

А я вам вказав що до оптимальності стосунку воно не має (принаймні в усіх реалізаціях інтерпретатора JS), тому про "оптимізацію" можна забути, якщо це не складна рантайм програма.

33

Re: Двовимірний масив

Як на мене,то є тоді коли є початкові елементи масиву і через числові індекси їх переприсвоюєш,а не пустий масив який тільки потім заповнюєш,пускаючи память в повітря. Може це економія на сірниках,але все ж.

34

Re: Двовимірний масив

там або еконмія на сірниках (все одно пам’ять виділяється не під 1 елемент а під більшу кулькість 16 наприклад), або взагалі ніякої (в разі якщо кожен елемент масиву представлений елементом зв’язаного списку, що більш ймовірно). Звичайно, зараз існує технологія JIT, компілятори більш просунуті, та навіть коли оптимізація кода і даних досягне небачених висот, то все одно "оптимізований" код часто не можна буде створити через використання мовної конструкції eval, а без цього індуси не індусять.

35 Востаннє редагувалося quez (10.02.2015 14:42:40)

Re: Двовимірний масив

0xDADA11C7 написав:

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

Нащо робити масив з індексацією за О(N), коли можна зробити за O(1), та ще й не надавши альтернативи?

36

Re: Двовимірний масив

VTrim написав:

Взагалі-то автору я створив двомірний асоціативний масив.
ktretyak же до чогось (не зрозуміло до чого) почав стверджувати,що масив з невпорядкованими числовими індексами взагалі не можна створити. Але ж можна. Хоч це і не оптимально.

Ви й досі не зрозуміли, що в JS не існує двовимірних асоціативних масивів? Я ще в перших повідомленнях пояснив свою точку зору.
http://replace.org.ua/post/49649/#p49649

Пояснюю додатково.

У відповідь на приведений вами код, зокрема

var mas = []; //створюємо масив
mas['name'] = {
'x': 'значення x',
'y': 'значення y',
'width': 'значення width',
'height': 'значення height',
};
...

я вас поправив, що таким чином не створюється масив, бо в JS не існує масивів з текстовими індексами. Та, кажу, більше того - не існує навіть масиву з непослідовними ключами. Що тут не зрозумілого?

На що ви, як наче справжній експерт в JS зі стажем, недбало кинули мені "що ви мелете?". Ну хоча я і не відчуваю себе експертом, як це очевидно ви зробили, ваша фраза з неповагою зачепила мене. Я вирішив все таки розібратись в цьому.

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

Ну і завершилась суперечка тим, що я чітко і сам зрозумів, і вам показав, що таки в JS не існує масиву з непослідовними індексами.

Це, швидше за все, не стосується оптимізації, але стосується чіткості розуміння що ви робите, коли використовуєте масиви в JS. Наприклад, якщо б ви захотіли отримати четвертий елемент в масиві за допомогою функції slice(), то ви б отримали undefined, що було б неочікуваним результатом.

Також в процесі суперечки я почитав за масиви і чіткіше зрозумів чому записуючи mas['name'] = 'test' - створюється об'єкт. Виявляється масив це теж об'єкт, але він має в своєму арсеналі методи роботи з числовими масивами...

37

Re: Двовимірний масив

"розібрались" значить,ну от і дрбре :). Не розумію,чим могла так зачепити фраза про "мелите". В очевидь таки вас як тру профі навіть таке може зачепити.

38

Re: Двовимірний масив

VTrim написав:

Не розумію,чим могла так зачепити фраза про "мелите".

Очевидно, літерою "и".

39

Re: Двовимірний масив

quez написав:
VTrim написав:

Не розумію,чим могла так зачепити фраза про "мелите".

Очевидно, літерою "и".

У фразі було ще дві помилки,так що ні :)

40

Re: Двовимірний масив

Пане ktretyak,це теж не двовимірний асоціативний масив?

<script>
var mas = {
"name": {"x": "test1","y": "test2"}
};

alert(mas['name']['x']);
</script>