Javascript.RU

Array

Создание

/* обычный синтаксис */
var array = [ elem0, elem1, elem2, ... ]
var empty = []

/* Синтаксис с new Array() */
var array = new Array( elem0, elem1, elem2, ...)
var empty = new Array()

/* Редкий синтаксис: аргумент new Array - одно число.
При этом создается массив заданной длины, 
все значения в котором undefined */
var array = new Array(10)

Аргументы

elem0, elem1, ...
  • Если ни один из параметров elem0, elem1, ... не указан, то инициализируется пустой массив.
  • Если указан лишь один числовой параметр elem0 и массив объявлен через new Array, то будет инициализирован пустой массив длины, равной данному числу. При этом все элементы являются undefined.
  • В ином случае создается массив из перечисленных элементов.

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


Описание, примеры

Объект Array предоставляет функционал

  1. Массива с любыми числовыми индексами (разреженного)
  2. Стека/очереди

Для задания массива, как правило, используется синтаксис с квадратными скобками. Объявление через new Array тоже возможно, но почти не используется.

Пример: Создать пустой массив
var arr = []
Пример: добавить элемент в конец
arr[arr.length] = 5  /* или arr.push(5) */
Пример: Создать массив из разных элементов
var arr = [ 4, "test", , false, [0,1] ]

alert(arr[1]) // => "test"
alert(arr[2]) // => undefined
alert(arr[3]) // => false
alert(arr[4][1]) // => 1

Можно добавить объект под любым индексом, даже превосходящим текущую длину массива. При этом массив хранит (и потребляет память) только те элементы, которые установлены.

В примере ниже массив будет хранить два элемента: номер 1 и номер 999.

Пример: разреженный массив
var arr = []
arr[1] = 5
arr[999] = 6

alert(arr[0]) // => undefined, такого значения нет
alert(arr.length) // => 1000 : последний индекс+1

Ассоциативные массивы

Класс Array рекомендуется использовать только для массивов с числовыми индексами.

Для ассоциативных массивов в javascript применяется Object.

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

Для многомерных массивов в javascript нет кросс-браузерного синтаксиса.

Обычно используется массив массивов, например:

// 3 в ширину 3 в высоту
// каждый подмассив - колонка
var matrix = [ [1,2,3], [4,5,6], [7,8,9] ]

alert(matrix[1][1])  // 5

Методы

push
shift
join
concat
splice
pop
unshift
slice
reverse
sort

Свойства

index
input
length

См. также


Автор: Гость (не зарегистрирован), дата: 1 марта, 2010 - 23:02
#permalink

Или что-нибудь похожее на record есть?


Автор: Илья Кантор, дата: 22 марта, 2010 - 15:42
#permalink

Да, Object


Автор: вебдев (не зарегистрирован), дата: 14 апреля, 2010 - 21:30
#permalink

Автор, подскажи как преоброзовать массив в строку, а затем обратно из строки получить массив. Чтобы не использовать JSON .


Автор: Гость (не зарегистрирован), дата: 23 июля, 2010 - 12:51
#permalink

см. join и split


Автор: Гость (не зарегистрирован), дата: 16 апреля, 2010 - 17:38
#permalink

А как просто без затей пройтись по json массиву? Вот сформировал я и получил его. Есть он у меня в переменной. Как перебрать элементы?


Автор: B@rmaley.e><e, дата: 16 апреля, 2010 - 18:39
#permalink

Так же, как и по обычному массиву.
for(var i = 0; i < arr.length; i++) alert(arr[i]);


Автор: Гость (не зарегистрирован), дата: 7 декабря, 2010 - 08:34
#permalink

for(var i = 0; i < arr.length; i++) alert(arr[i]);
Этот вариант не сработает, а точнее сработает, но не так как надо, в следующем случае:
var arr = []
arr[1] = 5
arr[999] = 6

В подобных случаях можно сделать так:
for(var i in arr) alert(arr[i]);


Автор: B@rmaley.e><e, дата: 7 декабря, 2010 - 10:33
#permalink

Можно, только и у него свои недостатки.

Array.prototype.IS_ARRAY = true;
var arr = [];
arr[1] = 3;
arr[93] = 5;
for(var key in arr) alert(key + ': ' + arr[key]);

Автор: djembuka, дата: 5 марта, 2011 - 14:59
#permalink

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


Автор: inst, дата: 24 января, 2012 - 12:57
#permalink

hasOwnProperty же.


Автор: B@rmaley.e><e, дата: 7 декабря, 2010 - 10:42
#permalink

Упс, пост дважды запостился.


Автор: Гость (не зарегистрирован), дата: 22 апреля, 2010 - 10:31
#permalink

есть какой либо метод для проверки существования элемента массива с заданным значением?


Автор: Гость (не зарегистрирован), дата: 5 мая, 2010 - 15:18
#permalink
if (typeof myarray[1] == 'undefined') alert('заданного элемента в массиве не существует');

Автор: Гость (не зарегистрирован), дата: 23 декабря, 2010 - 03:34
#permalink

Я так понял спросили не проверку существования элемента с заданным КЛЮЧОМ а проверку наличия заданного ЗНАЧЕНИЯ, т.е. что то подобное in_array() из PHP. Меня тож интерисует этот вопрос


Автор: Гость (не зарегистрирован), дата: 5 августа, 2011 - 13:37
#permalink

Есть такая функция, но не поддерживается неким семейством браузеров, поэтому надо написать свою. Например:

Array.prototype.in_array = function(_value){
for(var i = 0, l = this.length; i < l; i++) if (this[i] == _value) return i;
return undefined;
}

var a = ["This","is","array"];
a.in_array("is");//=>1
a.in_array("not");//=>undefined


Автор: inst, дата: 24 января, 2012 - 12:59
#permalink

Автор: Гость (не зарегистрирован), дата: 5 июня, 2010 - 11:19
#permalink

как преобразовать js массив в строку формата json ???


Автор: B@rmaley.e><e, дата: 5 июня, 2010 - 15:17
#permalink
alert(JSON.stringify([1,2,3, 'text']))

Только учтите, что нативная работа с JSON еще не очень кроссбраузерна.


Автор: Гость (не зарегистрирован), дата: 6 июня, 2010 - 01:36
#permalink

так и не нашёл способа сделать это с массивом, зато нашёл способ сделать это с объектом, так что в принципе моя проблема решена! http://code.google.com/p/jquery-json/


Автор: 9IP (не зарегистрирован), дата: 24 октября, 2010 - 10:32
#permalink

а почему у меня обявление через new Array не сработало? может это ошибка браузера? синтаксис был верен...


Автор: B@rmaley.e><e, дата: 24 октября, 2010 - 11:01
#permalink

Сколько аргументов Вы передавали? Если один, то он посчитался за длину массива.


Автор: Гость (не зарегистрирован), дата: 9 ноября, 2010 - 19:16
#permalink

как задать массив состоящий из элементов P1, P2,.......Pn, не вписывая все n (большое число) элементов в описание массива, и потом использовать эти элементы как переменные?
либо как задать сразу много переменных P1, P2, .........Pn

заранее спасибо.


Автор: B@rmaley.e><e, дата: 9 ноября, 2010 - 22:27
#permalink

А значения откуда брать? Если вы сможете сгенерировать i-ое значение по индексу, то достаточно организовать цикл вида

var arr = [], fnc = function(i){return i * i};
for(var i = 0; i < 1000; ++i) arr.push(fnc(i));
alert('Квадраты всех неотрицательных чисел, меньших 1000:\n' + arr.join(', '));

Автор: ramon (не зарегистрирован), дата: 24 ноября, 2010 - 19:41
#permalink

Запрашиваю элемент массива с другой страницы.
Т.е. он в определенное поле должен вставить значение данного массива, но вместо имени элемента он вставляет мне его индекс.
Подскажите, каким атрибутом можно уточнить мой запрос?


Автор: Гость (не зарегистрирован), дата: 18 декабря, 2010 - 04:58
#permalink

как задать тип данных всем элементам массива?


Автор: Гость (не зарегистрирован), дата: 9 марта, 2011 - 18:45
#permalink

В JS типы данных не задаются.


Автор: гост (не зарегистрирован), дата: 14 января, 2011 - 11:40
#permalink

Подскажите пожалуйста, а если у меня есть строка в ней 16 нулей, как из неё сделать массив из 16 элементов?


Автор: гост (не зарегистрирован), дата: 14 января, 2011 - 11:40
#permalink

Подскажите пожалуйста, а если у меня есть строка в ней 16 нулей, как из неё сделать массив из 16 элементов?


Автор: гост (не зарегистрирован), дата: 14 января, 2011 - 11:40
#permalink

Подскажите пожалуйста, а если у меня есть строка в ней 16 нулей, как из неё сделать массив из 16 элементов?


Автор: Гость (не зарегистрирован), дата: 9 марта, 2011 - 18:51
#permalink

var ar = "0000".split("")//массив из String-ов
for(var i = 0, l = ar.length; i < l; i++){
ar[i] = parseInt(ar[i], 10)//меняем на Number, если это подразумевалось
}


Автор: Гость (не зарегистрирован), дата: 20 мая, 2011 - 14:16
#permalink

var ar = "987654".match(/./g);


Автор: Гость (не зарегистрирован), дата: 10 марта, 2011 - 21:40
#permalink

Автор, подскажите, как сделать так, чтробы элементы массива можно было задавать в текстовом окне пользователем?


Автор: Marwell, дата: 1 мая, 2011 - 18:55
#permalink

Как сделать, чтобы в массив входили данные из нескольких символов?
У меня почемуто:

var e=[]
var e=(prompt ('введите массив чисел через запятую')) //1, 2, 3, 4
alert (e[0]) //1
alert (e[1]) //,
alert (e[2]) //
alert (e[3]) //2
alert (e[4]) //,
alert (e[5]) //
alert (e[6]) //3


Автор: B@rmaley.e><e, дата: 2 мая, 2011 - 00:38
#permalink

То, что Вы записали в e массив еще не означает, что он всегда им будет. Скажу по секрету, JS - язык с динамической типизацией, а prompt возвращает строку. Ту самую, которую ввел пользователь, со всеми запятыми, пробелами и цифрами. Применение оператора индексирования к строке - не более, чем получение соответствующего символа из строки.
Чтобы разбить строку на массивы по некоторому разделителю, используйте метод split:

var e = '1, 2, 3, 4'; // строка
var a = e.split(', '); // массив
alert(e + '\n' + a);

Автор: bobo (не зарегистрирован), дата: 10 августа, 2011 - 17:21
#permalink

узнай интересный способ преобразования массива в строку, где элементы массива будут идти через запятую
var arr = [1,2,3];
alert(''+arr);


Автор: Increazon, дата: 13 августа, 2011 - 16:04
#permalink

Фуфло этот джаваскрипт. С какого ему не нравится

array[] = 4;

Автор: B@rmaley.e><e, дата: 14 августа, 2011 - 12:39
#permalink

С такого, что это ни разу не по стандарту.
Если в php так можно, это ещё не значит, что оно должно работать везде.


Автор: zw0rk (не зарегистрирован), дата: 16 августа, 2011 - 13:28
#permalink

В хроме как минимум, new Array(items_count) не работает:

> new Array(5)
[]


Автор: melky, дата: 16 августа, 2011 - 20:39
#permalink
a =  [undefined,undefined,undefined];
b = new Array( 3 );

alert( [a,b].join('\n') );

Автор: B@rmaley.e><e, дата: 17 августа, 2011 - 17:39
#permalink

Что значит "не работает"?

alert(new Array(500).length)

Автор: maksimr (не зарегистрирован), дата: 1 сентября, 2011 - 13:56
#permalink

У меня такой вопрос почему:

var foo = function(){ return 1; };
1 == foo; // почему возврашает false

x == y
1) x - Number, y - object
2) x == toPrimitive(y);
toPrimitive -> входной аргумент y - type object
для Object:
Возвращает значение по умолчанию для объекта. Значение по умолчанию для объекта получается путём вызова для объекта внутреннего метода [[DefaultValue]] с передачей ему опциональной подсказки ПредпочтительныйТип. Поведение метода [[DefaultValue]] определяется данной спецификацией для всех встроенных объектов ECMAScript (8.6.2.6).

подсказка будет Number (скорее всего).

Дальше должны следовать такие шаги

Когда метод [[DefaultValue]] объекта O вызывается с подсказкой типа Number, предпринимаются следующие шаги:

1. Вызвать метод [[Get]] объекта O, передав в качестве аргумента "valueOf".
(тут он возвращает объект функцию [сам себя])

2. Если Результат(1) не является объектом - переход на шаг 5.

3. Вызвать метод [[Call]] у Результата(1), передав ему O в качестве значения this и пустой список аргументов.
(вот этот шаг я так понимаю мы можем промоделировать как: foo.call(foo) и он должен вернуть примитивное значение 1)

4. Если Результат(3) является элементарным значением - вернуть Результат(3).

Тогда вопрос почему же false а не true?

Заранее Спасибо!


Автор: Гость (не зарегистрирован), дата: 10 октября, 2011 - 13:39
#permalink

Как посчитать стоимость товаров?Спасибо
var Tovar = ["Ruchka", "Karandash", "Linejka"];

var Zena = ["5", "3", "2"] ;

var Kol = [100, 400, 200] ;


Автор: Гость (не зарегистрирован), дата: 31 октября, 2011 - 12:44
#permalink

var Tovar = ["Ruchka", "Karandash", "Linejka"];
var Zena = ["5", "3", "2"];
var Kol = [100, 400, 200];
var Stoim = [];
for (var i = 0; i < Tovar.length; i++)
{
Stoim[i] = Zena[i] * Kol[i];
document.write(Stoim[i] + "");
}


Автор: Гость (не зарегистрирован), дата: 31 октября, 2011 - 12:48
#permalink

в последней строчке:
document.write(Stoim[i] + "");
Это чтобы посмотреть результат, можно без него.


Автор: Гость (не зарегистрирован), дата: 28 ноября, 2011 - 19:37
#permalink

Здравствуйте! Такая ситуация: Пользователь кликает по странице, после каждого клика появляется квадратик в месте клика. Их может быть столько сколько хочет пользователь. Каждый квадратик элемент массива. как определить индекс, чтобы пользователь мог удалить любой квадратик, щелкнув по нему мышкой.
Заранее спасибо!


Автор: Questioner, дата: 26 февраля, 2012 - 15:07
#permalink
<script>
window.onclick = function(e) {
 var a = document.createElement("div");
 a.style.position = "absolute";
 a.style.left = e.pageX || e.clientX + document.documentElement.scroolLeft + "px";
 a.style.top = e.pageY || e.clientY + document.documentElement.scroolTop + "px";
 a.style.height = "20px";
 a.style.width = "20px";
 a.style.backgroundColor = "#000"
 a.onclick = function(e) {
  if(e.target.style.backgroundColor == "rgb(0, 0, 0)") {
   e.target.style.backgroundColor = "#888";
   e.target.innerHTML = "?";
  } else {
  document.body.removeChild(e.target);
  }
  e.cancelBubble = true;
 }
 document.body.appendChild(a);
}
</script>
<body>
</body>

Автор: Гость (не зарегистрирован), дата: 4 января, 2012 - 10:02
#permalink

Есть следующая проблема - получаю данные ajax-запросом. Вывести объект data удаётся без проблем (alert, document.write), но как только пытаюсь присвоить его значение элементу массива - выдаётся ошибка:
array1[0][0]=data; - "Uncaught TypeError: cannot set property '4' of undefined"
пробовал и по другому делать:
array1[0][0]=data(); - "Uncaught TypeError: string is not a function"
Как "победить" присвоение и присвоить текст элементу массива?


Автор: Gigo, дата: 27 января, 2012 - 15:56
#permalink

Есть переменные x="Kolya" y=14
надо обьявить переменную Kolya14 и присвоить чего нить
как пример получиться что то вроде
var Kolya14 = "чего нить";


Автор: Questioner, дата: 28 марта, 2012 - 15:56
#permalink
var x = "a", y = "b";
eval("var " + x + y + "= \"ANYTHING\"");
alert(ab);

Автор: Дим Лис (не зарегистрирован), дата: 29 января, 2012 - 22:49
#permalink

Зачем нужен способ задания

var a = new Array(2);

если все остальные элементы этого массива так же можно использовать, не взирая на заданную длину?
Например:

a[10]=12;
console.log(a[10]); //выдаст 12, без всяких помех

Автор: termi_uc, дата: 30 января, 2012 - 23:58
#permalink

if(!String.prototype.repeat)String.prototype.repeat = function(count) {
return new Array(count).join(this + "");
}


Автор: alexeyserd (не зарегистрирован), дата: 3 февраля, 2012 - 19:56
#permalink

как отсортировать массив1 из массива2 чисел в порядке возрастания значений чисел. но чтобы сортировка происходила по первому элементу массива2 ?

for(var dj=0; dj<time_array.length; dj++) {
for(var da=0; da<time_array.length; da++) {
if(time_array[dj][0]<time_array[da][0]) {var temp1=time_array[dj]; var temp2=time_array[(da-1)];
time_array[(da-1)]=temp1; time_array[dj]=temp2;
}
}
}

в чем ошибка?


Автор: Гость (не зарегистрирован), дата: 17 февраля, 2012 - 06:44
#permalink

facepalm.jpg


Автор: Гость (не зарегистрирован), дата: 17 февраля, 2012 - 06:45
#permalink
[js]
[js]
[js]
[js]
[js]
[css]
[html]
<ul>
 <li><code><code></code></code></li>
</ul>[/html][/css][/js][/js][/js][/js][/js]

Автор: Questioner, дата: 28 марта, 2012 - 16:01
#permalink
alert([] == []); // false
alert([] != []); // true
var a = [];
alert(a == a); // true
alert(a == []); // false
alert(a == new Array()); // false
var b = [];
alert(a == b); //  false

Почему?


Автор: Гость (не зарегистрирован), дата: 1 мая, 2012 - 10:47
#permalink

потому что сравниваются ссылки на массивы, а не массивы.

a==a - потому что ссылка одна и та же,
a!=[] - потому что ссылки разные.


Автор: Sofiya (не зарегистрирован), дата: 10 апреля, 2012 - 19:17
#permalink

Вот блин, я так долго учила js, и тут поняла что я ничего не знаю=( то есть как бы понимаю, но сама так сделать не могу..что делать?


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
5 + 5 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Реклама

Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние темы на форуме
Forum
Последние комментарии