Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.08.2021, 19:10
Аватар для lgick
Аспирант
Отправить личное сообщение для lgick Посмотреть профиль Найти все сообщения от lgick
 
Регистрация: 23.11.2013
Сообщений: 96

Как сделать функцию
Подскажите как сделать наиболее короткую функцию используя es6

const createObj = (...props) => ???


Чтоб при вызове:

createObj('a', 'b', 'c')

Получить

{'a': 'a', 'b': 'b', 'c': 'c'}

Хотелось бы, чтоб при создании объекта, его ключи и значения задавались короткой записью: вместо {'a': 'a'}, просто {'a'} ( как тут https://learn.javascript.ru/object#s...-iz-peremennoy)
Ответить с цитированием
  #2 (permalink)  
Старый 15.08.2021, 19:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

lgick,
пока так ...
const createObj = (...props) => Object.fromEntries(new Map(props.map(a => [a,a])));
console.log(createObj('a', 'b', 'c'))
Ответить с цитированием
  #3 (permalink)  
Старый 15.08.2021, 19:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

lgick,
или так ... )))
const createObj = (...props) => props.reduce((a, b) => Object.assign( a, {[b] : b}), {});
console.log(createObj('a', 'b', 'c'))
Ответить с цитированием
  #4 (permalink)  
Старый 15.08.2021, 20:03
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

const createObj  = (...a) => a.reduce((o, v) => ({...o, [v]: v}), {});
Ответить с цитированием
  #5 (permalink)  
Старый 15.08.2021, 20:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

lgick,
const createObj = (...props) => props.reduce((a, b) => ({...a, [b] : b}), {});
console.log(createObj('a', 'b', 'c'))
Ответить с цитированием
  #6 (permalink)  
Старый 15.08.2021, 20:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Alexandroppolus,
Ответить с цитированием
  #7 (permalink)  
Старый 15.08.2021, 20:05
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

хотя спредов по-моему нет в этом вашем es6

const createObj  = (...a) => a.reduce((o, v) => (o[v] = v, o), {});
Ответить с цитированием
  #8 (permalink)  
Старый 15.08.2021, 21:42
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

const createObj = (...a) => Object.fromEntries(a.map(v => [v, v]))
const createObj = (...a) => (o => (a.forEach(v => o[v] = v), o))({})

еще парочка вариантов
Ответить с цитированием
  #9 (permalink)  
Старый 15.08.2021, 23:49
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

const createObj = (...a) => Object.fromEntries(new Set(a).entries())
__________________
29375, 35
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать чтобы показывало высоту на гугл карте sergofedor06 Javascript под браузер 0 03.04.2017 20:28
Ajax. Как сделать загрузку изображений, отображение, удаление как на Авито wowtschuk AJAX и COMET 1 07.03.2017 01:34
Акардион меню из чекбоксов и списка, как сделать подсветку текущего элемента OliLoi jQuery 0 08.11.2016 08:15
Как сделать именованую функцию, запускающуюся при объявлении? Shitbox2 Общие вопросы Javascript 18 09.12.2012 15:45
Как сделать функцию типа toDataUrl для рисунка в ie6 ? Олег Общие вопросы Javascript 2 14.09.2008 00:06