@rapidum_alder

Как задать имя переменной через массив?

У меня большие куски кода в JS.
Это перегонка данных на сервер и обратно.
Вопрос можно ли сделать что то вроде:

function v(c) {
     return document.getElementById(c).value;
}
  
let arData ['User' , 'Name', 'Class', 'Info'] // тут полный список всех переменных

function ob_info (str, arr) {
  arr.forech( item => {
    return "${item}" : v('${str}${item}'),
  })
}

info = ob_info('data_' , arData); // data_  - какая - то приписка для id элемента


У меня постоянная ошибка формата, даже не знаю что делать.

Сейчас у меня так :
function v(c) {
    return document.getElementById(c).value;
}	

let info = {
            "User": v('data_User'),
            "Name" : v('data_Name'),
            "Class" : v('data_Class'),
            "A" : v('data_A'),
            "B" : v('data_B'),
            "C" : v('data_C'),
            "Info" : v('data_Info'),
            "STR" : v('data_STR'),
            "AGL" : v('data_AGL'),
            "BOD" : v('data_BOD'),
            "INT" : v('data_INT'),
            "WIS" : v('data_WIS'),
            "CHA" : v('data_CHA'),
            "PER" : v('data_PER'),
            "LUC" : v('data_LUC'),
            "KAR" : v('data_KAR')
        };
  • Вопрос задан
  • 107 просмотров
Решения вопроса 3
hzzzzl
@hzzzzl
покажи формат данных, и формат того что хочешь получить?

такое?
arr = ['User' , 'Name', 'Class', 'Info']

arr.reduce((obj, val) => {
  obj[val] = 'data_' + val
  return obj
}, {})

// {User: "data_User", Name: "data_Name", Class: "data_Class", Info: "data_Info"}


или чисто по-модному

function make(str, arr) {
  return arr.reduce((obj, val) => ({...obj, [val]: str + val}), {})
}

make('dd_', ['User' , 'Name', 'Class', 'Info'])
Ответ написан
@eandr_67
web-программист (*AMP, Go, JavaScript, вёрстка).
В данном случае проще и быстрее формировать объект банальным циклом:
function ob_info (str, arr) {
  let result = {};
  for (let key of arr) { result[key] = v(str + key); }
  return result;
}
Ответ написан
Комментировать
RAX7
@RAX7
function v(c) {
  return (document.getElementById(c) || {}).value;
}

let arData = ['User', 'Name', 'Class', 'Info'];

function ob_info(str, arr) {
  return arr.reduce((obj, item) => {
  	obj[item] = v(`${str}${item}`);
    return obj;
  }, {});
}
info = ob_info('data_', arData);
console.log(info);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
const prefix = 'data_'
const elems = Array.from(document.querySelectorAll(`[id^=${prefix}]`))
const values = elems.reduce((acc, el) => {
  const key = el.ad.replace(prefix, '')
  acc[key] = el.value
  return acc
}, {})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы