Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.08.2020, 16:51
Новичок на форуме
Отправить личное сообщение для Bromin Посмотреть профиль Найти все сообщения от Bromin
 
Регистрация: 15.08.2020
Сообщений: 2

Добавить свойство в конец ассоциативного массива
Помогите Пожалуйста
Есть код:

var channels = ['channel1', 'channel2', 'channel3', 'channel4'];
var commands = ["hello", "goodbye", "send", "countdown", "backcountdown"];
var cooldown = {};
for(i of commands) {
	cooldown[`${i}`] = {
		ready: true,
		cooldown: {}
	}
};
console.log(cooldown);


Он выводит:
{
	hello: { ready: true, cooldown: {} },
	goodbye: { ready: true, cooldown: {} },
	send: { ready: true, cooldown: {} },
	countdown: { ready: true, cooldown: {} },
	backcountdown: { ready: true, cooldown: {} }
}


Я хочу сделать так, чтобы в cooldown.(команды от hello до backcountdown).cooldown было
{
	'channel1': true,
	'channel2': true,
	'channel3': true,
	'channel4': true
}

То есть чтобы:
cooldown = {
	hello: { ready: true, cooldown: {'channel1': true, 'channel2': true, 'channel3': true, 'channel4': true} },
	goodbye: { ready: true, cooldown: {'channel1': true, 'channel2': true, 'channel3': true, 'channel4': true} },
	send: { ready: true, cooldown: {'channel1': true, 'channel2': true, 'channel3': true, 'channel4': true} },
	countdown: { ready: true, cooldown: {'channel1': true, 'channel2': true, 'channel3': true, 'channel4': true} },
	backcountdown: { ready: true, cooldown: {'channel1': true, 'channel2': true, 'channel3': true, 'channel4': true} }
}


Но я не должен каждый раз переписывать cooldown.(команды от hello до backcountdown).cooldown а коде, а он должен сам дописывать 'channeln': true столько сколько у меня каналов в массиве channels
Ответить с цитированием
  #2 (permalink)  
Старый 15.08.2020, 17:12
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Ну так надо заполнять в цикле значение свойства cooldown значениями channels. Но это должен быть объект, а не массив, почему его сразу и не прописан должным образом. Делать это скриптом вроде бы и смысла не имеет в данном случае:

var channels = Object.fromEntries(['channel1', 'channel2', 'channel3', 'channel4'].map((e)=> [e, true]));
Ответить с цитированием
  #3 (permalink)  
Старый 15.08.2020, 17:34
Новичок на форуме
Отправить личное сообщение для Bromin Посмотреть профиль Найти все сообщения от Bromin
 
Регистрация: 15.08.2020
Сообщений: 2

Большое Спасибо.
Я просто с JS начал самостоятельно учить и не знал этого.
И еще раз Большое Спасибо!
Ответить с цитированием
  #4 (permalink)  
Старый 15.08.2020, 18:07
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Bromin
Я просто с JS начал самостоятельно учить и не знал этого.
Чего? Если как массив в объект преобразовать, то зачем? Почему ни сразу прописать так:

var channels = {channel1: true, channel2: true, channel3: true, channel4: true}, //уже готовый объект
    commands = ["hello", "goodbye", "send", "countdown", "backcountdown"],
    cooldown = {};
    
for(i of commands) {
    cooldown[i] = {
        ready: true,
        cooldown: channels //добавляем описанный объект свойству 
    }
}

console.log(cooldown)


И в данном случае `${i}` лишнее, кроме бесполезной нагрузки на парсер ничего не несет полезного.
Ответить с цитированием
  #5 (permalink)  
Старый 15.08.2020, 18:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Bromin,
<script>
var channels = ['channel1', 'channel2', 'channel3', 'channel4'];
var commands = ["hello", "goodbye", "send", "countdown", "backcountdown"];
var ready = true;
var f = a => [a, ready];
var com = channels.map(f);
var cooldown = Object.fromEntries(com);
cooldown = Object.fromEntries(commands.map(c => [c ,{ready, cooldown}]));
document.write(JSON.stringify(cooldown, "", 4));
  </script>
Ответить с цитированием
  #6 (permalink)  
Старый 15.08.2020, 18:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от laimas
cooldown: channels //добавляем описанный объект свойству
лучше копию объекта
cooldown: {...channels}
Ответить с цитированием
  #7 (permalink)  
Старый 15.08.2020, 18:24
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от рони
лучше копию объекта
В общем да, вот почему он сразу не объект, зачем такие сложности.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить сss свойство не удаляя текущее smart-create Events/DOM/Window 2 30.06.2017 23:02
Добавить К элементов в конец массива allonemoon Серверные языки и технологии 2 26.05.2017 15:10
Метод не может получить свойство массива length crazyIvan Общие вопросы Javascript 1 10.11.2016 18:49
forEach для ассоциативного массива raja Общие вопросы Javascript 2 12.10.2016 17:08
Получить значения ассоциативного массива по ключу TITO Общие вопросы Javascript 2 11.01.2014 16:42