Объект 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 массиву? Вот сформировал я и получил его. Есть он у меня в переменной. Как перебрать элементы?
Так же, как и по обычному массиву.
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 же.
Упс, пост дважды запостился.
есть какой либо метод для проверки существования элемента массива с заданным значением?
if (typeof myarray[1] == 'undefined') alert('заданного элемента в массиве не существует');Я так понял спросили не проверку существования элемента с заданным КЛЮЧОМ а проверку наличия заданного ЗНАЧЕНИЯ, т.е. что то подобное 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
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Arr...
как преобразовать js массив в строку формата json ???
Только учтите, что нативная работа с JSON еще не очень кроссбраузерна.
так и не нашёл способа сделать это с массивом, зато нашёл способ сделать это с объектом, так что в принципе моя проблема решена! http://code.google.com/p/jquery-json/
а почему у меня обявление через new Array не сработало? может это ошибка браузера? синтаксис был верен...
Сколько аргументов Вы передавали? Если один, то он посчитался за длину массива.
как задать массив состоящий из элементов P1, P2,.......Pn, не вписывая все n (большое число) элементов в описание массива, и потом использовать эти элементы как переменные?
либо как задать сразу много переменных P1, P2, .........Pn
заранее спасибо.
А значения откуда брать? Если вы сможете сгенерировать 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(', '));Запрашиваю элемент массива с другой страницы.
Т.е. он в определенное поле должен вставить значение данного массива, но вместо имени элемента он вставляет мне его индекс.
Подскажите, каким атрибутом можно уточнить мой запрос?
как задать тип данных всем элементам массива?
В JS типы данных не задаются.
Подскажите пожалуйста, а если у меня есть строка в ней 16 нулей, как из неё сделать массив из 16 элементов?
Подскажите пожалуйста, а если у меня есть строка в ней 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 ar = "987654".match(/./g);
Автор, подскажите, как сделать так, чтробы элементы массива можно было задавать в текстовом окне пользователем?
Как сделать, чтобы в массив входили данные из нескольких символов?
У меня почемуто:
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 e = '1, 2, 3, 4'; // строка var a = e.split(', '); // массив alert(e + '\n' + a);узнай интересный способ преобразования массива в строку, где элементы массива будут идти через запятую
var arr = [1,2,3];alert(''+arr);
Фуфло этот джаваскрипт. С какого ему не нравится
С такого, что это ни разу не по стандарту.
Если в php так можно, это ещё не значит, что оно должно работать везде.
В хроме как минимум, new Array(items_count) не работает:
> new Array(5)
[]
a = [undefined,undefined,undefined]; b = new Array( 3 ); alert( [a,b].join('\n') );Что значит "не работает"?
У меня такой вопрос почему:
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?
Заранее Спасибо!
Как посчитать стоимость товаров?Спасибо
var Tovar = ["Ruchka", "Karandash", "Linejka"];
var Zena = ["5", "3", "2"] ;
var Kol = [100, 400, 200] ;
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] + "");
}
в последней строчке:
document.write(Stoim[i] + "");
Это чтобы посмотреть результат, можно без него.
Здравствуйте! Такая ситуация: Пользователь кликает по странице, после каждого клика появляется квадратик в месте клика. Их может быть столько сколько хочет пользователь. Каждый квадратик элемент массива. как определить индекс, чтобы пользователь мог удалить любой квадратик, щелкнув по нему мышкой.
Заранее спасибо!
<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>Есть следующая проблема - получаю данные 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 = "чего нить";
var x = "a", y = "b"; eval("var " + x + y + "= \"ANYTHING\""); alert(ab);Зачем нужен способ задания
если все остальные элементы этого массива так же можно использовать, не взирая на заданную длину?
Например:
if(!String.prototype.repeat)String.prototype.repeat = function(count) {
return new Array(count).join(this + "");
}
как отсортировать массив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; } } }в чем ошибка?
facepalm.jpg
Почему?
потому что сравниваются ссылки на массивы, а не массивы.
a==a - потому что ссылка одна и та же,
a!=[] - потому что ссылки разные.
Вот блин, я так долго учила js, и тут поняла что я ничего не знаю=( то есть как бы понимаю, но сама так сделать не могу..что делать?
Отправить комментарий
Приветствуются комментарии:- Полезные.
- Дополняющие прочитанное.
- Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.Для остальных вопросов и обсуждений есть форум.