Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.02.2021, 09:06
Аспирант
Отправить личное сообщение для Aruta Посмотреть профиль Найти все сообщения от Aruta
 
Регистрация: 08.07.2019
Сообщений: 85

Как задать ключ-значение объекту динамически?
Уже 4 дня голову ломаю, не могу понять как сделать. Гугл не помогает уже. Перебрать значения отдельно могу, вывести могу, а объединить не могу.

Может кто подсказать как создать новый объект, чтобы данные из meta, а именно meta.name и contact перетекли в него по формуле meta.name : contact.name.value?


Имеется объект:

meta: [
      { name: 'surname', title: 'Фамилия', type: 'text' },
      { name: 'name', title: 'Имя', type: 'text' },
      { name: 'secondName', title: 'Отчество', type: 'text' },
      { name: 'phone', title: 'Телефон', type: 'text' },
      { name: 'phone2', title: 'Телефон', type: 'text' },
      { name: 'mail', title: 'E-mail', type: 'text' },
      { name: 'address', title: 'Адрес', type: 'text' }
    ]


Другой объект:
contact: { "name": "Test", "surname": "FirstFamily", "phone": 21254 }


В итоге надо получить объект:
{ "surname": "FirstFamily" , "name": "Test", "secondName" : "", "phone" : 21254  .... }


Т.е. если surname в contact имеет значение, то в новом объекте имеет это же значение, но если в contact нет вообще ключа (например phone2), то он копируется из meta и значению присваивается ""

Последний раз редактировалось Aruta, 23.02.2021 в 09:09.
Ответить с цитированием
  #2 (permalink)  
Старый 23.02.2021, 09:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 30,451

Aruta,
let obj = meta.map(a => Object.assign(a, contact));

если вам нужно что-то иное, тогда нужен пример

что на входе, что на выходе полностью
Ответить с цитированием
  #3 (permalink)  
Старый 23.02.2021, 09:27
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,147

let meta= [
      { name: 'surname', title: 'Фамилия', type: 'text' },
      { name: 'name', title: 'Имя', type: 'text' },
      { name: 'secondName', title: 'Отчество', type: 'text' },
      { name: 'phone', title: 'Телефон', type: 'text' },
      { name: 'phone2', title: 'Телефон', type: 'text' },
      { name: 'mail', title: 'E-mail', type: 'text' },
      { name: 'address', title: 'Адрес', type: 'text' }
    ];
let contact= { "name": "Test", "surname": "FirstFamily", "phone": 21254 }

const f = (obj, meta) => {
	return meta.reduce ((o, {name, title, type}) => (o[name] = (name in obj)? obj[name]+'': '', o), {})
}

console.log(f(contact, meta))
Ответить с цитированием
  #4 (permalink)  
Старый 23.02.2021, 11:24
Аспирант
Отправить личное сообщение для Aruta Посмотреть профиль Найти все сообщения от Aruta
 
Регистрация: 08.07.2019
Сообщений: 85

voraa,
капец... Огроомное спасибо!

Пошел учить глубоко reduce значит
Ответить с цитированием
  #5 (permalink)  
Старый 23.02.2021, 11:39
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,147

Да тут не в reduce дело.
Можно и без него. Проще, но чуть длиннее.
let meta= [
      { name: 'surname', title: 'Фамилия', type: 'text' },
      { name: 'name', title: 'Имя', type: 'text' },
      { name: 'secondName', title: 'Отчество', type: 'text' },
      { name: 'phone', title: 'Телефон', type: 'text' },
      { name: 'phone2', title: 'Телефон', type: 'text' },
      { name: 'mail', title: 'E-mail', type: 'text' },
      { name: 'address', title: 'Адрес', type: 'text' }
    ];
let contact= { "name": "Test", "surname": "FirstFamily", "phone": 21254 }

const fnr = (obj, meta) => {
	const o = {}
	for (const {name} of meta) {
		o[name] = '';
		if (name in obj) o[name] += obj[name];
	}
	return o;
}

console.log(fnr(contact, meta))
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как взять значение value из формы? Sergius182 Events/DOM/Window 5 30.11.2018 09:09
Как получить значение которые были внесенны в td? Tomat Events/DOM/Window 3 01.08.2018 14:32
Выводить значение раньше переменных Гробовщик Общие вопросы Javascript 11 10.09.2013 07:42
Как в IE динамически установить значение события onClick? Гость Элементы интерфейса 6 16.01.2011 22:46
Значение переменной не может привысить 30 и опуститься ниже 1-го, как сделать? libinstyle Events/DOM/Window 3 12.07.2010 22:27