Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Массивы c числовыми индексами

Лекция



Привет, сегодня поговорим про массивы c числовыми индексами, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое массивы c числовыми индексами , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend).


  1. Объявление
  2. Методы pop/pushshift/unshift
    1. Конец массива
    2. Начало массива
  3. Внутреннее устройство массива
    1. Влияние на быстродействие
  4. Перебор элементов
  5. Особенности работы length
    1. Используем length для укорачивания массива
  6. Создание вызовом new Array
    1. new Array()
    2. Многомерные массивы
  7. Внутреннее представление массивов
  8. Итого

Массив с числовыми индексами - это коллекция данных, которая хранит сколько угодно значений, причем у каждого значения - свой уникальный номер.

Если переменная — это коробка для данных, то массив — это шкаф с нумерованными ячейками, в каждой из которых могут быть свои данные.

Например, при создании электронного магазина нужно хранить список товаров — для таких задач и придуман массив.

Объявление

Синтаксис для создания нового массива — квадратные скобки со списком элементов внутри.

Пустой массив:

var arr = [];

 

Массив fruits с тремя элементами:

 

var fruits = ["Яблоко""Апельсин""Слива"];

 

Элементы нумеруются, начиная с нуля. Чтобы получить нужный элемент из массива — указывается его номер в квадратных скобках:

 

   
1 var fruits = ["Яблоко""Апельсин""Слива"];
2  
3 alert(fruits[0]); // Яблоко
4 alert(fruits[1]); // Апельсин
5 alert(fruits[2]); // Слива

 

Элемент можно всегда заменить:

fruits[2] = 'Груша'// теперь ["Яблоко", "Апельсин", "Груша"]
… Или добавить:

 

 

fruits[3] = 'Лимон'// теперь ["Яблоко", "Апельсин", "Груша", "Лимон"]

 

Общее число элементов, хранимых в массиве, содержится в его свойстве length:

 

   
1 var fruits = ["Яблоко""Апельсин""Груша"];
2  
3 alert(fruits.length); // 3

 

Через alert можно вывести и массив целиком. При этом его элементы будут перечислены через запятую:

 

   
1 var fruits = ["Яблоко""Апельсин""Груша"];
2  
3 alert(fruits); // Яблоко,Апельсин,Груша

 

В массиве может храниться любое число элементов любого типа. В том числе, строки, числа, объекты и т.п.:

 

   
1 // микс значений
2 var arr = [ 1, 'Имя', { name: 'Петя' }, true ];
3  
4 // получить объект из массива и тут же -- его свойство
5 alert( arr[2].name ); // Петя

 

 

Важность: 5

Как получить последний элемент из произвольного массива?

У нас есть массив goods. Сколько в нем элементов — не знаем, но можем прочитать из goods.length. Напишите код для получения последнего элемента goods.

Решение

Последний элемент имеет индекс на 1 меньший, чем длина массива.

Например:

var fruits = ["Яблоко""Груша""Слива"];

 

Длина массива этого массива fruits.length равна 3. Здесь «Яблоко» имеет индекс0, «Груша» — индекс 1, «Слива» — индекс 2.

То есть, для массива длины goods:

var lastItem = goods[goods.length-1]; // получить последний элемент

 

[Открыть задачу в новом окне]

Важность: 5

Как добавить элемент в конец произвольного массива?

У нас есть массив goods. Напишите код для добавления в его конец значения «Компьютер».

Решение

Текущий последний элемент имеет индекс goods.length-1. Значит, индексом нового элемента будет goods.length:

goods[goods.length] = 'Компьютер'

 

[Открыть задачу в новом окне]

 

Методы pop/pushshift/unshift

Одно из применений массива — это очередь. В классическом программировании так называют упорядоченную коллекцию элементов, такую что элементы добавляются в конец, а обрабатываются — с начала.

В реальной жизни эта структура данных встречается очень часто. Например, очередь сообщений, которые надо отослать.

Очень близка к очереди еще одна структура данных: стек. Это такая коллекция элементов, в которой новые элементы добавляются в конец и берутся с конца.

Например, стеком является колода карт, в которую новые карты кладутся сверху, и берутся — тоже сверху.

Для того, чтобы реализовывать эти структуры данных, и просто для более удобной работы с началом и концом массива существуют специальные методы.

Конец массива

pop
Удаляет последний элемент из массива и возвращает его:

 

   
1 var fruits = ["Яблоко""Апельсин""Груша"];
2  
3 alert( fruits.pop() ); // удалили "Груша"
4  
5 alert(fruits); // Яблоко, Апельсин

 

push
Добавляет элемент в конец массива:

 

   
1 var fruits = ["Яблоко""Апельсин"];
2  
3 fruits.push("Груша");
4  
5 alert(fruits); // Яблоко, Апельсин, Груша

 

Является полным аналогом fruits[fruits.length] = ....

Начало массива

shift
Удаляет из массива первый элемент и возвращает его:
1 var fruits = ["Яблоко""Апельсин""Груша"];
2  
3 alert( fruits.shift() ); // удалили Яблоко
4  
5 alert(fruits); // Апельсин, Груша
unshift
Добавляет элемент в начало массива:
1 var fruits = ["Апельсин""Груша"];
2  
3 fruits.unshift('Яблоко');
4  
5 alert(fruits); // Яблоко, Апельсин, Груша

Массивы c числовыми индексами

Методы push и unshift могут добавлять сразу по несколько элементов:

 

   
1 var fruits = ["Яблоко"];
2  
3 fruits.push("Апельсин""Персик");
4 fruits.unshift("Ананас""Лимон");
5  
6 // результат: ["Ананас", "Лимон", "Яблоко", "Апельсин", "Персик"]
7 alert(fruits);

 

 

Важность: 5

Задача из 5 шагов-строк:

  1. Создайте массив styles с элементами «Джаз», «Блюз».
  2. Добавьте в конец значение «Рок-н-Ролл»
  3. Замените предпоследнее значение с конца на «Классика». Код замены предпоследнего значения должен работать для массивов любой длины.
  4. Удалите первое значение массива и выведите его alert.
  5. Добавьте в начало значения «Рэп» и «Регги».

Массив в результате каждого шага:

1 Джаз, Блюз
2 Джаз, Блюз, Рок-н-Ролл
3 Джаз, Классика, Рок-н-Ролл
4 Классика, Рок-н-Ролл
5 Рэп, Регги, Классика, Рок-н-Ролл

 

Решение
[Открыть задачу в новом окне]

 

 

Важность: 3

Напишите код для вывода alert случайного значения из массива:

var arr = ["Яблоко""Апельсин""Груша""Лимон"];

 

P.S. Код для генерации случайного целого от min to max включительно:

var rand = min + Math.floor( Math.random() * (max+1-min) );

 

Решение

Для вывода нужен случайный номер от 0 до arr.length-1 включительно.

 

   
1 var arr = ["Яблоко""Апельсин""Груша""Лимон"];
2  
3 var rand = Math.floor( Math.random() * arr.length );
4  
5 alert(arr[rand]);

 

[Открыть задачу в новом окне]

 

 

Важность: 4

Напишите код, который:

  • Запрашивает по очереди значения при помощи prompt и сохраняет их в массиве.
  • Заканчивает ввод, как только посетитель введет пустую строку, не число или нажмет «Отмена».
  • Выводит сумму всех значений массива

На демо-страничке tutorial/intro/array/calculator.html показан результат.

Решение

Решение: tutorial/intro/array/calculator.html

Перед prompt стоит + для преобразования к числу, иначе калькулятор будет складывать строки.

[Открыть задачу в новом окне]

 

Внутреннее устройство массива

Массив — это объект, где в качестве ключей выбраны цифры, с дополнительными методами и свойством length.

Так как это объект, то в функцию он передается по ссылке:

   
01 function eat(arr) {
02   arr.pop();
03 }
04  
05 var arr = ["нам""не""страшен""серый""волк"]
06  
07 alert(arr.length); // 5
08 eat(arr);
09 eat(arr);
10 alert(arr.length); // 3, в функцию массив не скопирован, а передана ссылка

 

Еще одно следствие — можно присваивать в массив любые свойства.

Например:

 

1 var fruits = []; // создать массив
2  
3 fruits[99999] = 5; // присвоить свойство с любым номером
4  
5 fruits.age = 25; // назначить свойство со строковым именем

 

.. Об этом говорит сайт https://intellect.icu . Но массивы для того и придуманы в JavaScript, чтобы удобно работать именно с упорядоченными, нумерованными данными. Для этого в них существуют специальные методы и свойство length.

Как правило, нет причин использовать массив как обычный объект, хотя технически это и возможно.

 

Вывод массива с «дырами»

Если в массиве есть пропущенные индексы, то при выводе в большинстве браузеров появляются «лишние» запятые, например:

 

   
1 var a = [];
2 a[0] = 0;
3 a[5] = 5;
4  
5 alert(a); // 0,,,,,5

 

Эти запятые появляются потому, что алгоритм вывода массива идет от 0 доarr.length и выводит все через запятую. Отсутствие значений дает несколько запятых подряд.

 

Влияние на быстродействие

Методы push/pop выполняются быстро, а shift/unshift — медленно.

Чтобы понять, почему работать с концом массива — быстрее, чем с его началом, разберем происходящее подробнее.

Операция shift выполняет два действия:

  1. Удалить элемент в начале.
  2. Обновить внутреннее свойство length.

При этом, так как все элементы находятся в своих ячейках, просто очистить ячейку с номером 0недостаточно. Нужно еще и переместить все ячейки на 1 вниз (красным на рисунке подсвечены изменения):

 

fruits.shift(); // убрать 1 элемент с начала
Массивы c числовыми индексами

 

Чем больше элементов в массиве, тем дольше их перемещать.

Аналогично работает unshift: чтобы добавить элемент в начало массива, нужно сначала перенести все существующие.

У методов push/pop таких проблем нет. Для того, чтобы удалить элемент, метод pop очищает ячейку и укорачивает length.

 

fruits.pop();  // убрать 1 элемент с конца

 

Массивы c числовыми индексами

Аналогично работает push.

Перебор элементов

Для перебора элементов обычно используется цикл:

 

   
1 var arr = ["Яблоко""Апельсин""Груша"];
2  
3 for (var i=0; i<arr.length; i++) {
4   alert( arr[i] );
5 }

 

 

Не используйте for..in для массивов

Так как массив является объектом, то возможен и вариант for..in:

 

   
1 var arr = ["Яблоко""Апельсин""Груша"];
2  
3 for (var key in arr) {
4   alert( arr[key] ); // Яблоко, Апельсин, Груша
5 }

 

Недостатки этого способа:

  • Цикл for..in выведет все свойства объекта, а не только цифровые.

    В браузере, при работе с объектами страницы, встречаются коллекции элементов, которые по виду как массивы, но имеют дополнительные нецифровые свойства, которые будут видны в цикле for..in.

    Бывают и библиотеки, которые предоставляют такие коллекции. Например jQuery. С виду — массив, но есть дополнительные свойства. Для перебора только цифровых свойств нужен цикл for(var i=0; i<arr.length...)

  • Цикл for (var i=0; i<arr.length; i++) в современных браузерах выполняется в 10-100 раз быстрее. Казалось бы, по виду он сложнее, но браузер особым образом оптимизирует такие циклы.

Если кратко: цикл for(var i=0; i<arr.length...) надежнее и быстрее.

 

Особенности работы length

Встроенные методы для работы с массивом автоматически обновляют его длину length.

Длина length — не количество элементов массива, а последний индекс + 1. Так уж оно устроено.

Это легко увидеть на следующем примере:

 

   
1 var arr = [];
2 arr[1000] = true;
3  
4 alert(arr.length); // 1001

 

Вообще, если у вас элементы массива нумеруются случайно или с большими пропусками, то стоит подумать о том, чтобы использовать обычный объект.

Массивы предназначены именно для работы с непрерывной упорядоченной коллекцией элементов.

Используем length для укорачивания массива

Обычно нам не нужно самостоятельно менять length… Но есть один фокус, который можно провернуть.

При уменьшении length массив укорачивается. Причем этот процесс необратимый, т.е. даже если потом вернуть length обратно — значения не восстановятся:

 

   
1 var arr = [1, 2, 3, 4, 5];
2  
3 arr.length = 2; // укоротить до 2 элементов
4 alert(arr); // [1, 2]
5  
6 arr.length = 5; // вернуть length обратно, как было
7 alert(arr[3]); // undefined: значения не вернулись

 

Самый простой способ очистить массив — это arr.length=0.

Создание вызовом new Array

new Array()

Существует еще один синтаксис для создания массива:

 

var arr = new Array("Яблоко""Груша""и т.п.");

 

Он редко используется, т.к. квадратные скобки [] короче.

Кроме того, у него есть одна особенность. Обычно new Array(элементы, ...) создает массив из данных элементов, но если у него один аргумент, и это число —то он создает массив без элементов, но с заданной длиной.

 

   
1 var arr = new Array(2,3); // создает массив [2, 3]
2  
3 arr = new Array(2); // создаст массив [2] ?
4  
5 alert(arr[0]); // нет! у нас массив без элементов, длины 2

 

Что же такое этот «массив без элементов, но с длиной»? Как такое возможно?

Оказывается, очень даже возможно и соответствует объекту {length: 2}. Получившийся массив ведет себя так, как будто его элементы равны undefined.

Это может быть неожиданным сюрпризом, поэтому обычно используют квадратные скобки.

Многомерные массивы

Массивы в JavaScript могут содержать в качестве элементов другие массивы. Это можно использовать для создания многомерных массивов, например матриц:

 

   
1 var matrix = [
2   [1, 2, 3],
3   [4, 5, 6],
4   [7, 8, 9]
5 ];
6  
7 alert(matrix[1][1]); // центральный элемент

 

Внутреннее представление массивов

 

Hardcore coders only

Эта секция относится ко внутреннему устройству структуры данных и требует специальных знаний. Она не обязательна к прочтению.

 

Числовые массивы, согласно спецификации, являются объектами, в которые добавили ряд свойств, методов и автоматическую длину length. Но внутри они, как правило, устроены по-другому.

Современные интерпретаторы стараются оптимизировать их и хранить в памяти не в виде хэш-таблицы, а в виде непрерывной области памяти, так же как в языке C. Операции с массивами также оптимизируются, особенно если массив хранит только один тип данных, например только числа. Порождаемый набор инструкций для процессора получается очень эффективным.

Как правило, у интерпретатора это получается, но при этом программист не должен мешать.

В частности:

  • Не ставить массиву произвольные свойства, такие как arr.test = 5. То есть, работать именно как с массивом, а не как с объектом.
  • Заполнять массив непрерывно. Как только браузер встречает необычное поведение массива, например устанавливается значение arr[0], а потом сразу arr[1000], то он начинает работать с ним, как с обычным объектом. Как правило, это влечет преобразование его в хэш-таблицу.

Если следовать этим принципам, то массивы будут занимать меньше памяти и быстрее работать.

Итого

Массивы существуют для работы с упорядоченным набором элементов.

Объявление:

1 // предпочтительное
2 var arr = [ элемент1, элемент2... ];
3  
4 // new Array
5 var arr = new Array( элемент1, элемент2...);

 

При этом new Array(число) создает массив заданной длины, без элементов. Чтобы избежать ошибок, предпочтителен первый синтаксис.

Свойство length — длина массива. Если точнее, то последний индекс массива плюс 1. Если ее уменьшить вручную, то массив укоротится. Если length больше реального количества элементов, то отсутствующие элементы равны undefined.

Массив можно использовать как очередь или стек.

Операции с концом массива:

  • arr.push(элемент1, элемент2...) добавляет элементы в конец.
  • var elem = arr.pop() удаляет и возвращает последний элемент.

Операции с началом массива:

  • arr.unshift(элемент1, элемент2...) добавляет элементы в начало.
  • var elem = arr.shift() удаляет и возвращает первый элемент.

Эти операции перенумеровывают все элементы, поэтому работают медленно.

В следующей главе мы рассмотрим другие методы для работы с массивами.

 

Важность: 3

Что выведет этот код?

1 var arr = [1,2,3];
2  
3 var a = arr;
4 a[0] = 5;
5  
6 alert(arr[0]);
7 alert(a[0]);

 

Решение

 

   
1 var arr = [1,2,3];
2  
3 var a = arr; // (*)
4 a[0] = 5;
5  
6 alert(arr[0]);
7 alert(a[0]);

 

Код выведет 5 в обоих случаях, так как массив является объектом. В строке (*) в переменную a копируется ссылка на него, а сам объект в памяти по-прежнему один, в нем отражаются изменения, внесенные через a или arr.

Если нужно именно скопировать массив, то это можно сделать, например, так:

var a = [];
for(var i=0; i<arr.length; i++) a[i] = arr[i];

 

[Открыть задачу в новом окне]

Важность: 3

Создайте функцию find(arr, value), которая ищет в массиве arrзначение value и возвращает его номер, если найдено, или -1, если не найдено.

Например:

1 arr = [ "test", 2, 1.5, false ];
2  
3 find(arr, "test"); // 0
4 find(arr, 2); // 1
5 find(arr, 1.5); // 2
6  
7 find(arr, 0); // -1

 

Решение

Возможное решение:

1 function find(array, value) {
2  
3   for(var i=0; i<array.length; i++) {
4     if (array[i] == value) return i;
5   }
6     
7   return -1;
8 }

 

Однако, в нем ошибка, т.к. сравнение == не различает 0 и false.

Поэтому лучше использовать ===. Кроме того, в современном стандарте JavaScript существует встроенная фунция Array#indexOf, которая работает именно таким образом. Имеет смысл ей воспользоваться, если браузер ее поддерживает.

 

   
01 function find(array, value) {
02   if (array.indexOf) { // если метод существует
03     return array.indexOf(value);
04   }
05  
06   for(var i=0; i<array.length; i++) {
07     if (array[i] === value) return i;
08   }
09     
10   return -1;
11 }
12  
13 var arr = ["a", -1, 2, "b"];
14  
15 var index = find(arr, 2);
16  
17 alert(index);

 

… Но еще лучшим вариантом было бы определить find по-разному в зависимости от поддержки браузером метода indexOf:

 

01 // создаем пустой массив и проверяем поддерживается ли indexOf
02 if ( [].indexOf ) {
03  
04   var find = function(array, value) {
05     return array.indexOf(value);
06   }
07  
08 else {
09   var find = function(array, value) {
10     for(var i=0; i<array.length; i++) {
11       if (array[i] === value) return i;
12     }
13     
14     return -1;
15   }
16  
17 }

 

Этот способ - лучше всего, т.к. не требует при каждом запуске find проверять поддержку indexOf.

[Открыть задачу в новом окне]

 

 

Важность: 3

Создайте фунцию filterRange(arr, a, b), которая принимает массив чисел arr и возвращает новый массив, который содержит только числа из arr из диапазона от a до b. То есть, проверка имеет вид a ≤ arr[i] ≤ b.
Функция не должна менять arr.

Пример работы:

1 var arr = [5, 4, 3, 8, 0];
2  
3 var filtered = filterRange(arr, 3, 5);
4 // теперь filtered = [5, 4, 3]
5 // arr не изменился

 

Решение
Решение, шаг 1

Алгоритм решения:

  1. Создайте временный пустой массив var results = [].
  2. Пройдите по элементам arr в цикле и заполните его.
  3. Возвратите results.
Решение, шаг 2

Код: tutorial/intro/array/filterRange.html.

[Открыть задачу в новом окне]

 

 

Важность: 3

Целое число, большее 1, называется простым, если оно не делится нацело ни на какое другое, кроме себя и 1.

Древний алгоритм «Решето Эратосфена» для поиска всех простых чисел до nвыглядит так:

  1. Создать список последовательных чисел от 2 до n2, 3, 4, ..., n.
  2. Пусть p=2, это первое простое число.
  3. Зачеркнуть все последующие числа в списке с разницей в p, т.е. 2p, 3p, 4p и т.д. В случае p=2 это будут 4,6,8....
  4. Поменять значение p на первое незачеркнутое число после p.
  5. Повторить шаги 3-4 пока p2 < n.
  6. Все оставшиеся незачеркнутыми числа - простые.

Посмотрите также анимацию алгоритма.

Реализуйте «Решето Эратосфена» в JavaScript. Найдите все простые числа до 100 и выведите их сумму.

Решение

Их сумма равна 1060.

Решение: tutorial/intro/array/sieve.html.

[Открыть задачу в новом окне]

 

 

Важность: 2

На входе массив чисел, например: arr = [1, -2, 3, 4, -9, 6].

Задача — найти непрерывный подмассив arr, сумма элементов которого максимальна.

Ваша функция должна возвращать только эту сумму.

Например:

1 getMaxSubSum([-1, 2, 3, -9]) = 5 (сумма выделенных)
2 getMaxSubSum([2, -1, 2, 3, -9]) = 6
3 getMaxSubSum([-1, 2, 3, -9, 11]) = 11
4 getMaxSubSum([-2, -1, 1, 2]) = 3
5 getMaxSubSum([100, -9, 2, -3, 5]) = 100
6 getMaxSubSum([1, 2, 3]) = 6 (неотрицательные - берем всех)

 

Если все элементы отрицательные, то не берем ни одного элемента и считаем сумму равной нулю:

getMaxSubSum([-1, -2, -3]) = 0

 

Постарайтесь придумать решение, которое работает за O(n2), а лучше за O(n) операций.

Решение
Подсказка для O(n2)

Можно просто посчитать для каждого элемента массива все суммы, которые с него начинаются.

Например, для [-1, 2, 3, -9, 11]:

01 // Начиная с -1:
02 -1
03 -1 + 2
04 -1 + 2 + 3
05 -1 + 2 + 3 + (-9)
06 -1 + 2 + 3 + (-9) + 11
07  
08 // Начиная с 2:
09 2
10 2 + 3
11 2 + 3 + (-9)
12 2 + 3 + (-9) + 11
13  
14 // Начиная с 3:
15 3
16 3 + (-9)
17 3 + (-9) + 11
18  
19 // Начиная с -9
20 -9
21 -9 + 11
22  
23 // Начиная с -11
24 -11

 

Сделайте вложенный цикл, который на внешнем уровне бегает по элементам массива, а на внутреннем — формирует все суммы элементов, которые начинаются с текущей позиции.

Решение для O(n2)

Решение через вложенный цикл:

   
01 function getMaxSubSum(arr) {
02   var maxSum = 0; // если совсем не брать элементов, то сумма 0
03  
04   for(var i=0; i<arr.length; i++) {
05     var sumFixedStart = 0;
06     for(var j=i; j<arr.length; j++) {
07       sumFixedStart += arr[j];
08       maxSum = Math.max(maxSum, sumFixedStart);
09     }
10   }
11  
12   return maxSum;
13 }
14  
15 alert( getMaxSubSum([-1, 2, 3, -9]) ); // 5
16 alert( getMaxSubSum([-1, 2, 3, -9, 11]) ); // 11
17 alert( getMaxSubSum([-2, -1, 1, 2]) ); // 3
18 alert( getMaxSubSum([1, 2, 3]) ); // 6
19 alert( getMaxSubSum([100, -9, 2, -3, 5]) ); // 100

 

Алгоритм для O(n)

Будем идти по массиву и накапливать в некоторой переменной s текущую частичную сумму. Если в какой-то момент s окажется отрицательной, то мы просто присвоимs=0. Утверждается, что максимум из всех значений переменной s, случившихся за время работы, и будет ответом на задачу.

Докажем этот алгоритм.

В самом деле, рассмотрим первый момент времени, когда сумма s стала отрицательной. Это означает, что, стартовав с нулевой частичной суммы, мы в итоге пришли к отрицательной частичной сумме — значит, и весь этот префикс массива, равно как и любой его суффикс имеют отрицательную сумму.

Следовательно, от всего этого префикса массива в дальнейшем не может быть никакой пользы: он может дать только отрицательную прибавку к ответу.

Решение за O(n)

 

   
01 function getMaxSubSum(arr) {
02   var maxSum = 0, partialSum = 0;
03   for (var i=0; i<arr.length; i++) {
04     partialSum += arr[i];
05     maxSum = Math.max(maxSum, partialSum);
06     if (partialSum < 0) partialSum = 0;
07   }
08   return maxSum;
09 }
10  
11  
12 alert( getMaxSubSum([-1, 2, 3, -9]) ); // 5
13 alert( getMaxSubSum([-1, 2, 3, -9, 11]) ); // 11
14 alert( getMaxSubSum([-2, -1, 1, 2]) ); // 3
15 alert( getMaxSubSum([100, -9, 2, -3, 5]) ); // 100
16 alert( getMaxSubSum([1, 2, 3]) ); // 6
17 alert( getMaxSubSum([-1, -2, -3]) ); // 0

 

Информацию об алгоритме вы также можете прочитать здесь: http://e-

К сожалению, в одной статье не просто дать все знания про массивы c числовыми индексами. Но я - старался. Если ты проявишь интерес к раскрытию подробностей,я обязательно напишу продолжение! Надеюсь, что теперь ты понял что такое массивы c числовыми индексами и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)

создано: 2014-10-07
обновлено: 2021-03-13
132640



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)

Термины: Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)