Re: Двовимірний масив
В 18 пості ви кажете,що mas.length це кількість елементів,що не є правдою.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → JavaScript, TypeScript, ECMAScript → Двовимірний масив
В 18 пості ви кажете,що mas.length це кількість елементів,що не є правдою.
Вам тут було б корисно почати все спочатку, і почати з визначень, тому що схоже, що ваші визначення елемента масиву трохи відрізняються.
В 18 пості ви кажете,що mas.length це кількість елементів,що не є правдою.
Так, я не знав що length виводить максимальне ціле значення + 1, а тому я написав це справді помилково, але я доводжу вам не це...
думаю це поставить крапку в нашій суперечці:
var mas = [];
mas[0] = 'test0';
mas[2] = 'test2';
mas[3] = 'test3';
mas[7] = 'test7';
console.log(mas.slice(5))
Функція slice(begin[, end]) витягує з масиву значення починаючи з певного елемента. Якщо б у наведеному масиві було всього 4 елементи, то вона б нічого не повернула.
Теорему доведено.
Почитав,що таке заповнення масиву хоч і є зручним,але потрібно бути обережним з тим,що в такому випадку є не вигідне використання пам'яті,оскільки місце резервується для всіх елементів,в тому числі і не ініціалізованих.
Почитав,що таке заповнення масиву хоч і є зручним,але потрібно бути обережним з тим,що в такому випадку є не вигідне використання пам'яті,оскільки місце резервується для всіх елементів,в тому числі і не ініціалізованих.
Коли ви почнете розуміти устрій інтерпретаторів, то кинете PHP, тож не переймайтесь дрібницями.
Почитав,що таке заповнення масиву хоч і є зручним,але потрібно бути обережним з тим,що в такому випадку є не вигідне використання пам'яті,оскільки місце резервується для всіх елементів,в тому числі і не ініціалізованих.
Коли ви почнете розуміти устрій інтерпретаторів, то кинете PHP, тож не переймайтесь дрібницями.
Я в загальному розумію як працює інтерпретатор PHP. Для вас кожна мова,яка працює через інтерпретатор,це шлак?
Ні, я сам часто користуюсь інтерпретованими мовами і JS зокрема. Але ж ви не навряд будете сперечатися, що запис
var mas = [];
mas["one"] = 'test0';
mas["two"] = 'test2';
mas["three"] = 'test3';
mas["seven"] = 'test7';
ви використаєте в проекті без якихось докорів "оптимізаційного" сумління, якщо вам буде так робити зручніше (наприклад для перемикання мов на сайті). А такий самий приклад з індексами вам здається чимось неоптимізованим.
Ні, я сам часто користуюсь інтерпретованими мовами і JS зокрема. Але ж ви не навряд будете сперечатися, що запис
var mas = []; mas["one"] = 'test0'; mas["two"] = 'test2'; mas["three"] = 'test3'; mas["seven"] = 'test7';
ви використаєте в проекті без якихось докорів "оптимізаційного" сумління, якщо вам буде так робити зручніше (наприклад для перемикання мов на сайті). А такий самий приклад з індексами вам здається чимось неоптимізованим.
А в вашому прикладі є якась неоптимальність? console.log(mas) виводить пустий масив, а якщо використати числові індекси, то виводить масив з дірками. Чи може я неправильно дивлюсь?
Всі елементи масиву можна дізнатися за допомогою функції arr.forEach(callback[, thisArg]) Неоптимізованого в моєму прикладі нема, бо нема його застосування деінде.
Взагалі-то автору я створив двомірний асоціативний масив.
ktretyak же до чогось (не зрозуміло до чого) почав стверджувати,що масив з невпорядкованими числовими індексами взагалі не можна створити. Але ж можна. Хоч це і не оптимально.
А я вам вказав що до оптимальності стосунку воно не має (принаймні в усіх реалізаціях інтерпретатора JS), тому про "оптимізацію" можна забути, якщо це не складна рантайм програма.
Як на мене,то є тоді коли є початкові елементи масиву і через числові індекси їх переприсвоюєш,а не пустий масив який тільки потім заповнюєш,пускаючи память в повітря. Може це економія на сірниках,але все ж.
там або еконмія на сірниках (все одно пам’ять виділяється не під 1 елемент а під більшу кулькість 16 наприклад), або взагалі ніякої (в разі якщо кожен елемент масиву представлений елементом зв’язаного списку, що більш ймовірно). Звичайно, зараз існує технологія JIT, компілятори більш просунуті, та навіть коли оптимізація кода і даних досягне небачених висот, то все одно "оптимізований" код часто не можна буде створити через використання мовної конструкції eval, а без цього індуси не індусять.
кожен елемент масиву представлений елементом зв’язаного списку, що більш ймовірно
Нащо робити масив з індексацією за О(N), коли можна зробити за O(1), та ще й не надавши альтернативи?
Взагалі-то автору я створив двомірний асоціативний масив.
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' - створюється об'єкт. Виявляється масив це теж об'єкт, але він має в своєму арсеналі методи роботи з числовими масивами...
"розібрались" значить,ну от і дрбре . Не розумію,чим могла так зачепити фраза про "мелите". В очевидь таки вас як тру профі навіть таке може зачепити.
Не розумію,чим могла так зачепити фраза про "мелите".
Очевидно, літерою "и".
VTrim написав:Не розумію,чим могла так зачепити фраза про "мелите".
Очевидно, літерою "и".
У фразі було ще дві помилки,так що ні
Пане ktretyak,це теж не двовимірний асоціативний масив?
<script>
var mas = {
"name": {"x": "test1","y": "test2"}
};
alert(mas['name']['x']);
</script>