Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подобие индексированных массивов. (https://javascript.ru/forum/misc/85078-podobie-indeksirovannykh-massivov.html)

savsoft 29.03.2023 23:59

Подобие индексированных массивов.
 
Всем привет!

В php при обработке результатов я использую массивы. Так как заранее неизвестно какие модули попадут в тест, то делаю типа так

Для правильного ответа
$arr[КодМодуля][0] += 1;
Для подсчета вопросов в модуле
$arr[КодМодуля][1] += 1;

То есть я знаю, что в 0 элементе хранятся правильные ответы, а в первом общее количество вопросов.

Но в js я не могу задать свой индекс массива, а тупо гонять циклы и при совпадении КодМодуля считать выглядит не очень.

Как правильно в js делать такие задачи?

Спасибо

ksa 30.03.2023 00:29

Цитата:

Сообщение от savsoft
Подобие индексированных массивов.

Возможно тебя устроят объекты...

const o = {
  'Модуль 1': [0, 0],
  'Модуль 2': [0, 0],
  'Модуль 3': [0, 0],
}

o['Модуль 2'][0] += 1
// или так
++o['Модуль 2'][1]
alert(JSON.stringify(o, null, 2))

savsoft 30.03.2023 00:43

Цитата:

Сообщение от ksa (Сообщение 551319)
Возможно тебя устроят объекты...

[JS run]const o = {
'Модуль 1': [0, 0],
'Модуль 2': [0, 0],
'Модуль 3': [0, 0],
}

Модуль 1,2,3 можно задавать динамически или только при описании?

Хотя в любом случае объекты подходят. Спасибо.

savsoft 30.03.2023 01:10

Цитата:

Сообщение от ksa (Сообщение 551319)
Возможно тебя устроят объекты...
o['Модуль 2'][0] += 1

Попробовал код модуля задавать так

const marr = [3441, 3442, 3443];

o[marr[0]][0] += 1

Вроде работает, но правильно ли так? Проблем не будет?

ksa 30.03.2023 10:48

Цитата:

Сообщение от savsoft
но правильно ли так?

Ты же вроде такое и хотел...

Цитата:

Сообщение от savsoft
Проблем не будет?

У объектов есть ограничение по ключам... Они будут "переделываться" в строки. Если твой "КодМодуля" это просто набор из цифр - проблем не будет.

ksa 30.03.2023 10:51

Цитата:

Сообщение от savsoft
Модуль 1,2,3 можно задавать динамически или только при описании?

"Модуль N" я написал только для примера...
Так же хотел показать что ключи это именно строки. Т.ч. вои циферки (коды) будут записаны как строки

const o = {
  '3441': [0, 0],
  '3442': [0, 0],
  '3443': [0, 0],
}

savsoft 30.03.2023 12:37

Цитата:

Сообщение от ksa (Сообщение 551324)
Ты же вроде такое и хотел...


У объектов есть ограничение по ключам... Они будут "переделываться" в строки. Если твой "КодМодуля" это просто набор из цифр - проблем не будет.

Да, именно это я и спрашивал. Смутило, что ключ в кавычках. А я вставил просто цифровое значение из массива. Но если оно само "переделывается" в строки, и с цифрами проблем нет, то это именно то, что мне нужно. Попробовал, все работает.

Большое спасибо!

ksa 30.03.2023 14:26

Цитата:

Сообщение от savsoft
Смутило, что ключ в кавычках

Не всякая строка может быть использована без кавычек... :)
Например такое можно и без кавычек

const o = {
   test: [0, 0],
   test123: [0, 0],
   test_new: [0, 0],
   $test: [0, 0],
}
alert(JSON.stringify(o, null, 2))


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