Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Многоуровневый массив (https://javascript.ru/forum/dom-window/51479-mnogourovnevyjj-massiv.html)

cript 07.11.2014 23:56

Многоуровневый массив
 
Приветствую!
//Создаем два массива
a1 = []; a2= [];
//Добавляем в конец новое значение:
a1[a1.length] = var;
a2[a2.length] = var2;
//Считываем есть ли в массиве элементы
if(a1.length == 1) && (a2.length == 1)){...}
//Удаляем первое значение 
a1.splice(0,1); 
a2.splice(0,1);

Подскажите, как это все реализовать под многоуровневый массив?
То есть вместо этих двух массивов нужен один вида a[key1][0], a[key2][0]

kostyanet 08.11.2014 10:33

В какой еще конец? В JS нельзя добавить элемент элемент массива с произвольным индексом. То есть можно, но результат будет неожиданным применительно к .length

Нормально для этого используют arr.push(value); а для удаления первого arr.shift()

kostyanet 08.11.2014 10:35

Цитата:

Сообщение от cript
То есть вместо этих двух массивов нужен один вида a[key1][0], a[key2][0]

У вас нет иерархии, или ее не видно. Продолжайте юзать 2 массива параллельно.

Aetae 08.11.2014 10:46

Наверное имеется ввиду это:
//Создаем два массива
a = [[], []];
//Добавляем в конец новое значение:
a[0].push('var');
a[1].push('var2');
//Считываем есть ли в массиве элементы
if(a[0].length > 0 && a[1].length > 0){...}
//Удаляем первое значение
a[0].shift();
a[1].shift();

kostyanet 08.11.2014 10:55

Все равно когерентности не будет, а ТС ее и хочет. Ну чтобы a1 был связан с а2.

cript 09.11.2014 01:04

Нужно чтобы вместо двух массивов был всего один, то есть на данный момент у меня a1[0] = 'index'; a2[0] = 'index2'; , а нужно
a[key1][0] = 'index' , a[key2][0] = 'index2'

рони 09.11.2014 01:10

cript,
var a = [];
a['key1'] = ['index'];
a['key2'] = ['index2'];
alert(a['key1'][0]);
alert(a['key2'][0]);

Safort 09.11.2014 01:11

var a = [['index'], ['index2']];

alert(a[0][0]); // index
alert(a[1][0]); // index2

Safort 09.11.2014 01:13

Ну что за ерунда? Опять опоздал на меньше чем минуту(
рони, ты выиграл(

рони 09.11.2014 01:59

Safort,
непереживай, зато ты понимаешь что пишет kobezzza :) а я только догадываюсь :lol:

Safort 09.11.2014 02:22

рони,
ты про SS, ES6 или ещё что-то?)

рони 09.11.2014 02:25

Safort,
да

Safort 09.11.2014 02:38

рони,
зря ты так, довольно интересные и полезные вещи)

рони 09.11.2014 02:47

Цитата:

Сообщение от Safort
зря ты так, довольно интересные и полезные вещи)

пока мой скилл для этого слишком низок, так что я вам просто по хорошему завидую.

cript 09.11.2014 03:03

Цитата:

Сообщение от рони (Сообщение 339909)
cript,
var a = [];
a['key1'] = ['index'];
a['key2'] = ['index2'];
alert(a['key1'][0]);
alert(a['key2'][0]);

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

рони 09.11.2014 03:15

cript,
если вы про массив а - то он пуст и нет в нём ни одного элемента, а вот его свойства содержат массивы - и нет свойствах ни первого ни последнего - и лучше тогда a = {};

Safort 09.11.2014 03:22

рони,
Цитата:

пока мой скилл для этого слишком низок
>>Карма: +3069
>>Регистрация: 27.05.2010
>>Всего сообщений: 6,770

Ну зачем же так шутить на ночь глядя?

Safort 09.11.2014 03:24

cript,
хочешь я дам ссылку на один очень качественный учебник по JavaScript'у? Там про массивы подробно объясняется.

рони 09.11.2014 03:36

Safort,
чтоб вы поняли мой уровень - http://javascript.ru/forum/misc/4503...nerhtml-3.html

cript 10.11.2014 06:40

Цитата:

Сообщение от Safort (Сообщение 339935)
cript,
хочешь я дам ссылку на один очень качественный учебник по JavaScript'у? Там про массивы подробно объясняется.

Да я весь инет пересмотрел везде одно и то же..

Цитата:

Сообщение от рони (Сообщение 339933)
cript,
если вы про массив а - то он пуст и нет в нём ни одного элемента, а вот его свойства содержат массивы - и нет свойствах ни первого ни последнего - и лучше тогда a = {};

пытаюсь делать так
a = {};
a = {key1:"index",key2:"index2"}

Нужно к key1 добавить в конец новое значение, потом определить есть ли в key1 хоть одно значение, далее удалить первое значение.

Aetae 10.11.2014 07:13

cript, в js нет понятия "многоуровневый массив". Есть массив( [] ). Есть объект( {} ). Ведут они себя (если утрировать) одинаково, только в первом ключи - цифры, во втором произвольные строки.
Если в хотите имитировать "многоуровневый массив" вы должны один массив\объект положить в другой..
a = {
  key1: [
    "index"
  ], 
  key2: [
    "index2"
  ]
}

cript 10.11.2014 08:42

Цитата:

Сообщение от Aetae (Сообщение 340115)
cript, в js нет понятия "многоуровневый массив". Есть массив( [] ). Есть объект( {} ). Ведут они себя (если утрировать) одинаково, только в первом ключи - цифры, во втором произвольные строки.
Если в хотите имитировать "многоуровневый массив" вы должны один массив\объект положить в другой..
a = {
  key1: [
    "index"
  ], 
  key2: [
    "index2"
  ]
}

В таком случае добавить к индексу key1 в конец новое значение можно так a['key1'] = 'new';
Удалить первое значение delete a['key1'][0];
Проверить на наличие значений в ключе key1 if(a['key1'] != undefined)?

рони 10.11.2014 08:59

cript,
проверить if('key1' in a && a['key1'].length)
удалить добавить смотрите работу с массивом

Aetae 10.11.2014 09:00

cript, нет по всем пунктам кроме последнего(но и он - плох).
По ключу key1 в объект a находится массив.
Делая так: a['key1'] = 'new' вы заменяте массив на строку 'new', а ничего никуда не добавляете. "Равно" - это "равно", а не "добавить".
Если вы хотите добавить значение в массив по ключу key1 и с индексом 0 - так и следует писать a['key1'][0] = 'new', а лучше востпользоваться специальным методом массива, a['key1'].push('new'). Для удаления из массива также нельзя(не хорошо) использовать delete, т.к. индексы при удалении через delete не пересчитываются. Забрать первое значение: a['key1'].shift(), последнее: a['key1'].pop() .

А вообще сдаётся мне что вы нифигашеньки не читали никаких статей или учебников.
http://learn.javascript.ru/array
http://learn.javascript.ru/object
http://learn.javascript.ru/array-methods

cript 10.11.2014 10:10

Благодарю за ответы, разобрался

kostyanet 11.11.2014 15:19

Нет никаких массивов в скриптах, это голимые коллекции. Даже если оно посчитает length == 100500 после arr[100500]=1, это - рендер, а там - в кишках - 1 элемент. js только изображает настоящий массив чем и сбивает своих мемберов с толку.

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

С другой стороны применения таким православным массива в народе нет. Народ нормально понимает только коллекции.


Часовой пояс GMT +3, время: 11:40.