Объект Array
предоставляет функционал
- Массива с любыми числовыми индексами (разреженного)
- Стека/очереди
Для задания массива, как правило, используется синтаксис с квадратными скобками. Объявление через 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
Или что-нибудь похожее на record есть?
Да, Object
синтаксис похож на с++
спасибо за то что показали все на оной странице
Автор, подскажи как преоброзовать массив в строку, а затем обратно из строки получить массив. Чтобы не использовать JSON .
см. join и split
Я не очень понимаю, что такое JSON Array? JSON насколько мне известно это формат записи объектов. Ну и Array тоже можно создать так же типа
Однако после создания никакого JSON у нас нету! Есть только объект Array со всеми его свойствами... О каком таком JSON Array идёт речь? Может это тип, который я не знаю?
А как просто без затей пройтись по json массиву? Вот сформировал я и получил его. Есть он у меня в переменной. Как перебрать элементы?
Так же, как и по обычному массиву.
for(var i = 0; i < arr.length; i++) alert(arr[i]);
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]);
Можно, только и у него свои недостатки.
Кроме того, в IE ключ перебирается, начиная с последней позиции, а не с первой, как в остальных браузерах.
hasOwnProperty же.
Упс, пост дважды запостился.
есть какой либо метод для проверки существования элемента массива с заданным значением?
Я так понял спросили не проверку существования элемента с заданным КЛЮЧОМ а проверку наличия заданного ЗНАЧЕНИЯ, т.е. что то подобное in_array() из PHP. Меня тож интерисует этот вопрос
Есть такая функция, но не поддерживается неким семейством браузеров, поэтому надо написать свою. Например:
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
А вот это хорошая мысль... Правда у Array появился метод IndexOf типа как у строки и кстати второй lastIndexOf тоже. Но не уверен что в моём JavaScript он есть.Если нет, то добавлю ваш код. Надеюсь он работает...
как преобразовать js массив в строку формата json ???
Только учтите, что нативная работа с JSON еще не очень кроссбраузерна.
так и не нашёл способа сделать это с массивом, зато нашёл способ сделать это с объектом, так что в принципе моя проблема решена! http://code.google.com/p/jquery-json/
а почему у меня обявление через new Array не сработало? может это ошибка браузера? синтаксис был верен...
Сколько аргументов Вы передавали? Если один, то он посчитался за длину массива.
как задать массив состоящий из элементов P1, P2,.......Pn, не вписывая все n (большое число) элементов в описание массива, и потом использовать эти элементы как переменные?
либо как задать сразу много переменных P1, P2, .........Pn
заранее спасибо.
А значения откуда брать? Если вы сможете сгенерировать i-ое значение по индексу, то достаточно организовать цикл вида
Запрашиваю элемент массива с другой страницы.
Т.е. он в определенное поле должен вставить значение данного массива, но вместо имени элемента он вставляет мне его индекс.
Подскажите, каким атрибутом можно уточнить мой запрос?
как задать тип данных всем элементам массива?
В JS типы данных не задаются.
Подскажите пожалуйста, а если у меня есть строка в ней 16 нулей, как из неё сделать массив из 16 элементов?
Подскажите пожалуйста, а если у меня есть строка в ней 16 нулей, как из неё сделать массив из 16 элементов?
var ar = "0000".split("")//массив из String-ов
for(var i = 0, l = ar.length; i < l; i++){
ar[i] = parseInt(ar[i], 10)//меняем на Number, если это подразумевалось
}
Автор, подскажите, как сделать так, чтробы элементы массива можно было задавать в текстовом окне пользователем?
Как сделать, чтобы в массив входили данные из нескольких символов?
У меня почемуто:
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
То, что Вы записали в e массив еще не означает, что он всегда им будет. Скажу по секрету, JS - язык с динамической типизацией, а prompt возвращает строку. Ту самую, которую ввел пользователь, со всеми запятыми, пробелами и цифрами. Применение оператора индексирования к строке - не более, чем получение соответствующего символа из строки.
Чтобы разбить строку на массивы по некоторому разделителю, используйте метод split:
узнай интересный способ преобразования массива в строку, где элементы массива будут идти через запятую
var arr = [1,2,3];
alert(''+arr);
В хроме как минимум, new Array(items_count) не работает:
> new Array(5)
[]
Что значит "не работает"?
У меня такой вопрос почему:
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?
Заранее Спасибо!
потому что foo это функция, и сравнивать её со значением 1 мы естественно получим false а вот 1 == foo() совсем другое дело.
Как посчитать стоимость товаров?Спасибо
var Tovar = ["Ruchka", "Karandash", "Linejka"];
var Zena = ["5", "3", "2"] ;
var Kol = [100, 400, 200] ;
Здравствуйте! Такая ситуация: Пользователь кликает по странице, после каждого клика появляется квадратик в месте клика. Их может быть столько сколько хочет пользователь. Каждый квадратик элемент массива. как определить индекс, чтобы пользователь мог удалить любой квадратик, щелкнув по нему мышкой.
Заранее спасибо!
Есть следующая проблема - получаю данные 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"
Как "победить" присвоение и присвоить текст элементу массива?
Есть переменные x="Kolya" y=14
надо обьявить переменную Kolya14 и присвоить чего нить
как пример получиться что то вроде
var Kolya14 = "чего нить";
Зачем нужен способ задания
если все остальные элементы этого массива так же можно использовать, не взирая на заданную длину?
Например:
как отсортировать массив1 из массива2 чисел в порядке возрастания значений чисел. но чтобы сортировка происходила по первому элементу массива2 ?
в чем ошибка?
Почему?
потому что сравниваются ссылки на массивы, а не массивы.
a==a - потому что ссылка одна и та же,
a!=[] - потому что ссылки разные.
а если у меня объявлены переменные
var a=2;
var b=3;
как мне их внести в массив?
var m=new Array(a, b); ????
Можно и через new, но обычным синтаксисом будет лаконичнее:
var m = [a, b];
ребята! Здравствуйте! Мучаюсь я тут с одной проблемой, не могу победить. Может Вы что нибудь подскажите?
В общем то есть надобность передать посредством php массив, да так чтобы при загрузке страницы по клику в checkBoxe javascript пошел и забрал этот массив. С этим проблем нет
.....конец php, начало js
..... конец js, начало html
кстати! при запросе -
разобрался с одномерным массивом! Все работает! Не работает с многомерным
не получается создать ассоциативный массив в цикле (используя выборку из тегов).
Пишу следующее:
Значение переменных из выборки - правильное, а вот с массивом проблема - он пустой. Подскажите, что пишу не так.
Спасибо.
Индекс верхнего уровня в вашем случае должен быть простым массивом, а не ассоциативным. Попробуйте так:
И, возможно, объявление slideData следует вынести во внешний контекст, если вы планируете обращаться к этому массиву и в дальнейшем, после отработки данной функции.
09 /* Редкий синтаксис: аргумент new Array - одно число.
10 При этом создается массив заданной длины,
11 все значения в котором undefined */
12 var array = new Array(10)
Если я правильно понял, то это вариант дает тот же результат что и
var array=[]; array.length=10;
При этом массив пустой, т. е. вообще не имеет значений. А это не то же самое, что массив со всеми элементами undefined.
пишу проверку данных на js, но происходит ошибка кто может её объяснить
var user=document.getElementById("user");
var pass1=document.getElementById("pass1");
var pass2=document.getElementById("pass2");
var err1=document.getElementById("err1");
var err2=document.getElementById("err2");
var err3=document.getElementById("err3");
var p=/^[a-z0-9]$/i;
var q=[0,1,2];
function key1() {
if (!p.test(user)) { q[1]=0; } else {q[1]=1;}
}
_______________________________________________________
Подскажите, пожалуйста, как вывести значения многомерного масcива в div:
var td = new Array();
var pib = td[0] = new Array();
var tel = td[1] = new Array();//и т.д//
function s(){
for (var i=0; i<=td.length; i++){ ?}
}
А вот подскажите как лучше сделать:
Например есть массив и переменная с прилетевшем значением.
Есть выпадающий список select. При выборе из списка option то его value летит в JS и загоняется в err. Вопрос.
Как сделать сравнение перелетевшего значение в err с arr? То есть как с 1го раза проверить а совпадает ли перелетевшее значение с цифрами из массива или нет? Если нет то выдаем определенное сообщение. если совпадает то ничего не делаем и просто идем мимо.
например:
Как стилизовать масив?
LOLWUT? Массив — это объект JavaScript, причём тут стили?
может все-таки сериализовать? toString?
Жаль, что не освещены самые, на мой взгляд, полезные методы: map, filter, reduce, reduceRight, forEach, every, some.
С ними работа с массивами становится очень приятным делом.
не подскажете в каком случае arr[arr.length]=a и arr.push(a) не эквивалентны ?
Что делать, если нужно найти максимум в массиве? Поможет метод apply.
var nums = [1,2,10,4,5];
console.log(Math.max.apply(null, nums)); // или Math.max.apply(Math, nums)
Чтобы каждый раз не вызывать такой метод для массива через Math, его можно определить для прототипа класса Array.
Array.prototype.max = function() {return Math.max.apply(null, this);};
Добрый день товарищи. Столкнулся на мой взгляд с примитивной задачей. Подозреваю решение тоже не должно быть особо сложным. Вопрос простой, как можно к определённым элементам массива назначить одно значение.
Мне казалось что так будет работать а нет, назначается только одному элементу.
Не хочется описывать каждый элемент по отдельности, хоть их и не много.
Null, можно сделать двумя способами, но функционал одинаковый.
Первый вариант - это записать функцию в прототип, а второй - создать простую функцию. Разница только в использовании и передаваемых параметрах.
Какой злой код получился! Спасибо за помощь!
Я тут попутно нашёл метод "splice" для массива, вроде с ним по проще будет решение:)
Здравствуйте, есть вопрос касательно элементов массивов. Вот кусок скрипта:
Мне казалось, что при указании obj = null по ссылке занулятся и элементы массива. Однако, в последнем alert мне вывелось два раза "Имя". При этом, если у obj занулить поле name, то тогда у элементов массива будет занулён name.
Вопрос - почему так?
Потому что объекты передаются/присваиваются по ссылке.
Сперва был создан объект с name:'Вася', его ссылка была записана в "var obj".
Затем ссылка на объект была добавлена в массив 2 раза.
Затем ссылка в obj была удалена, но сам объект остался в памяти.
Соответственно, т.к. у массива имеются ссылки на объект в памяти, обращение к свойству name работает и возвращает 'Вася'.
Подскажите, пожалуйста, как сделать следующее преобразование:
задан массив var arr1=[elem1,elem2,...,elemn] //элементы этого массива переменные; необходимо пройтись по этому массиву, с каждой переменной сделать однотипное математической преобразование, в результате получить новый массив, состоящий из преобразованных переменных var arr2=[elem1new, elem2new,..., elemnnew]? Заранее спасибо.
в php есть удобный способ присвоения различным переменным значения соответствующих элементов массива, например:
$arr = array('1', '2',.. );
list($a, $b) = $arr;
т.е. иными словами результат предыдущей строчки будет аналогичен коду:
$a = $arr[0] //== '1'
$b = $arr[1] //== '2'
есть ли нечто похожее в javascript?
добавьте в справочник описание метода forEach, подробнее
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global...
var arr = [ 4, "test", , false, [0,1] ]
alert(arr[1]) // => "test"
alert(arr[2]) // => undefined
alert(arr[3]) // => false
alert(arr[4][1]) // => 1
Я не понял почему в 3-ей сторочке элемент underfined, если элементы в массиве нумеруются с нуля, то 2-й элемент должен быть false. Тот же вопрос и по 4 строчке. Поясните, пожалуйста.
Потому что между элементами "test" и false есть неуказанный элемент(, ,). Вот и получается что
arr[2] //=> undefined.
А четвертой строчке кода нужен второй элемент в пятом элементе arr массива, который имеет значение 1. (Просто это массив в массиве)
alert(arr[4][1]) // => 1
Всем привет!
Есть такой селектор
По нажатии кнопки выполняется следующая функция:
Вопрос, почему из value передается строковый тип данных вместо числового? И как сделать что бы передавалось число?
Если указан лишь один числовой параметр elem0 и массив объявлен через new Array, то будет инициализирован пустой массив длины, равной данному числу. При этом все элементы являются undefined.
Please note, that new Array(45); does not "create a 45 element array" (in same meaning as [undefined,undefined,..undefined] does). It rather "creates empty array with length = 45" ([undefined x 45]), same as var foo = []; foo.length=45;. That's why forEach, and map will not apply in this case. – tomalec Jan 24 '14 at 14:00
а как же : reduce(), map(), filter(), some(), every()?
задача:не применяя методы массивов вывести n первых членов ряда Фибоначчи
Никак не могу понять. Почему это не работает:
, а это работает:
Ошибка есть:
arr[arr.length] = 5
Нужно:
arr[arr.length-1] = 5
Здравствуй, JS!))
Есть многомерный массив:
Как к каждому подмассиву присоединить соответствующий аудиофайл, чтобы при вызове подмассива он звучал?
Спасибо!