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
pop
unshift
slice
reverse
sort
splice

Свойства

index
input
length

См. также


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

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


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

Да, Object


Автор: Гость (не зарегистрирован), дата: 12 сентября, 2017 - 14:56
#permalink

синтаксис похож на с++


Автор: гость (не зарегистрирован), дата: 8 декабря, 2023 - 23:40
#permalink

спасибо за то что показали все на оной странице


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

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


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

см. join и split


Автор: Гость (не зарегистрирован), дата: 9 августа, 2015 - 15:19
#permalink

Я не очень понимаю, что такое JSON Array? JSON насколько мне известно это формат записи объектов. Ну и Array тоже можно создать так же типа

var ar = [el1,el2,el3,el4,...]

Однако после создания никакого JSON у нас нету! Есть только объект Array со всеми его свойствами... О каком таком JSON Array идёт речь? Может это тип, который я не знаю?


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

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


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

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


Автор: Гость (не зарегистрирован), дата: 7 декабря, 2010 - 07: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 - 09: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 - 13:59
#permalink

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


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

hasOwnProperty же.


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

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


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

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


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

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

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


Автор: Гость (не зарегистрирован), дата: 5 августа, 2011 - 12: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


Автор: Гость (не зарегистрирован), дата: 9 августа, 2015 - 15:41
#permalink

А вот это хорошая мысль... Правда у Array появился метод IndexOf типа как у строки и кстати второй lastIndexOf тоже. Но не уверен что в моём JavaScript он есть.Если нет, то добавлю ваш код. Надеюсь он работает...


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

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


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

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


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

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


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

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


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

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


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

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

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


Автор: B@rmaley.e><e, дата: 9 ноября, 2010 - 21: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 - 18:41
#permalink

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


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

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


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

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


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

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


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

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


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

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


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

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


Автор: Marwell, дата: 1 мая, 2011 - 17: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, дата: 1 мая, 2011 - 23:38
#permalink

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

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

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

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


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

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

> new Array(5)
[]


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

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

alert(new Array(500).length)

Автор: maksimr (не зарегистрирован), дата: 1 сентября, 2011 - 12: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?

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


Автор: VBKesha, дата: 15 октября, 2012 - 15:05
#permalink

потому что foo это функция, и сравнивать её со значением 1 мы естественно получим false а вот 1 == foo() совсем другое дело.


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

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

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

var Kol = [100, 400, 200] ;


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

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


Автор: Гость (не зарегистрирован), дата: 4 января, 2012 - 09: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 - 14:56
#permalink

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


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

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

var a = new Array(2);

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

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

Автор: alexeyserd (не зарегистрирован), дата: 3 февраля, 2012 - 18: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;
}
}
}

в чем ошибка?


Автор: Questioner, дата: 28 марта, 2012 - 15: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 - 09:47
#permalink

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

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


Автор: Гость (не зарегистрирован), дата: 16 июля, 2012 - 15:18
#permalink

а если у меня объявлены переменные

var a=2;
var b=3;

как мне их внести в массив?

var m=new Array(a, b); ????


Автор: Дзен-трансгуманист, дата: 17 июля, 2012 - 12:27
#permalink

Можно и через new, но обычным синтаксисом будет лаконичнее:
var m = [a, b];


Автор: гость Денис (не зарегистрирован), дата: 27 августа, 2012 - 14:43
#permalink

ребята! Здравствуйте! Мучаюсь я тут с одной проблемой, не могу победить. Может Вы что нибудь подскажите?

В общем то есть надобность передать посредством php массив, да так чтобы при загрузке страницы по клику в checkBoxe javascript пошел и забрал этот массив. С этим проблем нет

<?
$phpArray = array(1,2,3,4,10,20,30)
?>

.....конец php, начало js

.....
var checkBoxes = document.getElementsByTagName('input');
jsArray = checkBoxes.value;
//проблемы начинаются тут - переменная считывается, но как с массивом я с ней работать не могу(так чтобы запросив jsArray[2] получить 3. вместо этого получаю undefined), хотя запрашивая просто jsArray получаю все содержимое через запятую????? Что делать?

..... конец js, начало html

<input name="data" id="check"  onclick="checkBox()" value="<?php echo join(",", $phpArray); ?>" type="checkbox">

Автор: Гость Денис (не зарегистрирован), дата: 28 августа, 2012 - 08:15
#permalink

кстати! при запросе -

jsArray[0] //дает все содержимое через запятую! как преобразовать так чтобы был полноценный массив?

Автор: Гость Денис (не зарегистрирован), дата: 28 августа, 2012 - 08:56
#permalink

разобрался с одномерным массивом! Все работает! Не работает с многомерным Sad


Автор: Гость (не зарегистрирован), дата: 31 августа, 2012 - 17:45
#permalink

не получается создать ассоциативный массив в цикле (используя выборку из тегов).

Пишу следующее:

<div id="slide0" class="slide-data-class">

   <p class="title">Title0</p>
   <p class="image">Image0</p>
   <p class="url">Url0</p>

</div>


<div id="slide1" class="slide-data-class">

   <p class="title">Title1</p>
   <p class="image">Image1</p>
   <p class="url">Url1</p>

</div>
$(document).ready(function(){

	var n=2;
	var slideData = {};
	for (i=0; i<n; i++){
		var titleVar = $('#slide' + i + ' p.title').html(),
			imageVar = $('#slide' + i + ' p.image').html(),
			urlVar = $('#slide' + i + ' p.url').html();
				
		slideData[i]['title'] = titleVar;
		slideData[i]['image'] = imageVar;
		slideData[i]['url'] = urlVar;
}

Значение переменных из выборки - правильное, а вот с массивом проблема - он пустой. Подскажите, что пишу не так.

Спасибо.


Автор: Дзен-трансгуманист, дата: 1 сентября, 2012 - 01:55
#permalink

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

$(document).ready(function(){

  var n = 2;
  var slideData = [];

  for (i=0; i<n; i++) {

    var titleVar = $('#slide' + i + ' p.title').html(),
        imageVar = $('#slide' + i + ' p.image').html(),
        urlVar = $('#slide' + i + ' p.url').html();

    slideData[i] = {};
    slideData[i]['title'] = titleVar;
    slideData[i]['image'] = imageVar;
    slideData[i]['url'] = urlVar;
  }
});

И, возможно, объявление slideData следует вынести во внешний контекст, если вы планируете обращаться к этому массиву и в дальнейшем, после отработки данной функции.


Автор: NisSAM (не зарегистрирован), дата: 5 сентября, 2012 - 13:51
#permalink

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

Если я правильно понял, то это вариант дает тот же результат что и

var array=[]; array.length=10;

При этом массив пустой, т. е. вообще не имеет значений. А это не то же самое, что массив со всеми элементами undefined.


Автор: DrLenux (не зарегистрирован), дата: 21 сентября, 2012 - 08:41
#permalink

пишу проверку данных на 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;}
}

_______________________________________________________


Автор: Гость (не зарегистрирован), дата: 5 октября, 2012 - 22:16
#permalink

Подскажите, пожалуйста, как вывести значения многомерного мас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++){ ?}
}


Автор: Гость (не зарегистрирован), дата: 24 октября, 2012 - 17:57
#permalink

А вот подскажите как лучше сделать:
Например есть массив и переменная с прилетевшем значением.

var arr = [0, 5, 12];
var eer = $('#ship :selected').val();

Есть выпадающий список select. При выборе из списка option то его value летит в JS и загоняется в err. Вопрос.
Как сделать сравнение перелетевшего значение в err с arr? То есть как с 1го раза проверить а совпадает ли перелетевшее значение с цифрами из массива или нет? Если нет то выдаем определенное сообщение. если совпадает то ничего не делаем и просто идем мимо.
например:

if (err != arr[]) {ok = confirm('Сообщение')};

Автор: Гость (не зарегистрирован), дата: 3 ноября, 2012 - 12:38
#permalink

Как стилизовать масив?


Автор: Незарегистрированный (не зарегистрирован), дата: 26 августа, 2013 - 18:05
#permalink

LOLWUT? Массив — это объект JavaScript, причём тут стили?


Автор: goss, дата: 27 января, 2014 - 02:14
#permalink

может все-таки сериализовать? toString?


Автор: Незарегистрированный (не зарегистрирован), дата: 26 августа, 2013 - 18:03
#permalink

Жаль, что не освещены самые, на мой взгляд, полезные методы: map, filter, reduce, reduceRight, forEach, every, some.

С ними работа с массивами становится очень приятным делом.


Автор: notRegixtered (не зарегистрирован), дата: 6 декабря, 2013 - 01:10
#permalink

не подскажете в каком случае arr[arr.length]=a и arr.push(a) не эквивалентны ?


Автор: goss, дата: 27 января, 2014 - 02:18
#permalink

Что делать, если нужно найти максимум в массиве? Поможет метод 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 (не зарегистрирован), дата: 13 марта, 2014 - 18:46
#permalink

Добрый день товарищи. Столкнулся на мой взгляд с примитивной задачей. Подозреваю решение тоже не должно быть особо сложным. Вопрос простой, как можно к определённым элементам массива назначить одно значение.
Мне казалось что так будет работать а нет, назначается только одному элементу.

requiredfields[0,1,2,4,5,8].setRequiredLevel("none");

Не хочется описывать каждый элемент по отдельности, хоть их и не много.


Автор: Денис Решетняк (не зарегистрирован), дата: 15 марта, 2014 - 23:40
#permalink

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

var requiredfields = [1,2,3,4,5,6,7,8,9];

Array.prototype.setRequiredLevel = function(indexes, value) {
    var arr = this;
    arr.forEach(function(el, i){
        if (indexes.indexOf(i) > -1) {
            arr[i] = value;
        }
    });
}

function setRequiredLevel(arr, indexes, value) {
    arr.forEach(function(el, i){
        if (indexes.indexOf(i) > -1) {
            arr[i] = value;
        }
    });
}
console.log('array before set value', requiredfields);
//вариант с прототипом
//requiredfields.setRequiredLevel([0,1,2,7], 'new value');
//вариант с функцией
setRequiredLevel(requiredfields, [0, 3, 5, 8], 'new value');
console.log('array after set value', requiredfields);

Автор: Null (не зарегистрирован), дата: 19 марта, 2014 - 14:16
#permalink

Какой злой код получился! Спасибо за помощь!
Я тут попутно нашёл метод "splice" для массива, вроде с ним по проще будет решение:)


Автор: Givis, дата: 16 апреля, 2014 - 18:26
#permalink

Здравствуйте, есть вопрос касательно элементов массивов. Вот кусок скрипта:

var obj = {
	             name : "Имя"
	        };

		var objArray = [obj, obj];
		obj = null;
		alert(obj);
		
		for (var i = 0; i < objArray.length; i++)
			alert(objArray[i].name);

Мне казалось, что при указании obj = null по ссылке занулятся и элементы массива. Однако, в последнем alert мне вывелось два раза "Имя". При этом, если у obj занулить поле name, то тогда у элементов массива будет занулён name.
Вопрос - почему так?


Автор: Гость (не зарегистрирован), дата: 22 мая, 2014 - 09:38
#permalink

Потому что объекты передаются/присваиваются по ссылке.
Сперва был создан объект с name:'Вася', его ссылка была записана в "var obj".
Затем ссылка на объект была добавлена в массив 2 раза.
Затем ссылка в obj была удалена, но сам объект остался в памяти.
Соответственно, т.к. у массива имеются ссылки на объект в памяти, обращение к свойству name работает и возвращает 'Вася'.


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

Подскажите, пожалуйста, как сделать следующее преобразование:
задан массив var arr1=[elem1,elem2,...,elemn] //элементы этого массива переменные; необходимо пройтись по этому массиву, с каждой переменной сделать однотипное математической преобразование, в результате получить новый массив, состоящий из преобразованных переменных var arr2=[elem1new, elem2new,..., elemnnew]? Заранее спасибо.


Автор: Гость (не зарегистрирован), дата: 21 ноября, 2014 - 17:53
#permalink

в php есть удобный способ присвоения различным переменным значения соответствующих элементов массива, например:
$arr = array('1', '2',.. );
list($a, $b) = $arr;
т.е. иными словами результат предыдущей строчки будет аналогичен коду:
$a = $arr[0] //== '1'
$b = $arr[1] //== '2'

есть ли нечто похожее в javascript?


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

добавьте в справочник описание метода forEach, подробнее
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global...


Автор: Гость (не зарегистрирован), дата: 18 августа, 2015 - 14:34
#permalink

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 строчке. Поясните, пожалуйста.


Автор: Гость (не зарегистрирован), дата: 8 октября, 2017 - 00:16
#permalink

Потому что между элементами "test" и false есть неуказанный элемент(, ,). Вот и получается что
arr[2] //=> undefined.
А четвертой строчке кода нужен второй элемент в пятом элементе arr массива, который имеет значение 1. (Просто это массив в массиве)
alert(arr[4][1]) // => 1


Автор: dronsen, дата: 25 августа, 2015 - 11:48
#permalink

Всем привет!
Есть такой селектор

<lable>forfeit:
        			<select name="forfeit" id="forfeit_select">
        				<option value="none">select...</option>
						<option value="0,0964516129032258">Banner</option>
						<option value="0,1609677419354839">Copyright</option>
        		    </select>
           		</lable><br/>
<button id="result_forfeit" onclick="forfeit_pait()">to get result</button>

По нажатии кнопки выполняется следующая функция:

function forfeit_pait(){
var type = document.getElementById('forfeit_select').value;
var paid=1*type;
	alert(paid);
}

Вопрос, почему из value передается строковый тип данных вместо числового? И как сделать что бы передавалось число?


Автор: Гость (не зарегистрирован), дата: 8 сентября, 2015 - 20:26
#permalink

Если указан лишь один числовой параметр 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


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

а как же : reduce(), map(), filter(), some(), every()?


Автор: Гость (не зарегистрирован), дата: 24 декабря, 2017 - 13:18
#permalink
var n = +prompt( 'значение n', '' );

function fib(n) {
    var a = 1,
        b = 1;
    for (var i = 3; i <= n; i++) {
        var c = a + b;
        a = b;
        b = c;
    }

    return b;
}

console.log( fib( n ) );

задача:не применяя методы массивов вывести n первых членов ряда Фибоначчи


Автор: Гость (не зарегистрирован), дата: 19 января, 2018 - 15:18
#permalink

Никак не могу понять. Почему это не работает:

var arr = Array(3);
        //arr.fill(0);
        var arr2 = arr.map((item,i,ar) => {
           return 1;
        });
        console.log("arr:", arr);
        console.log("arr2:",arr2);

, а это работает:

var arr = Array(3);
        arr.fill(0);
        var arr2 = arr.map((item,i,ar) => {
           return 1;
        });
        console.log("arr:", arr);
        console.log("arr2:",arr2);

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

Ошибка есть:

arr[arr.length] = 5

Нужно:

arr[arr.length-1] = 5


Автор: Гость (не зарегистрирован), дата: 25 января, 2022 - 04:01
#permalink

Здравствуй, JS!))
Есть многомерный массив:

let matrix = [
  ["a", "b", "c"], 
  ["d", "e", "f"], 
  ["x", "y", "z"]
];

Как к каждому подмассиву присоединить соответствующий аудиофайл, чтобы при вызове подмассива он звучал?
Спасибо!


 
Поиск по сайту
Содержание

Учебник javascript

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

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

Интерфейсы

Все об AJAX

Оптимизация

Разное

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

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