@Axel030392

Как изменить переменную в массивоподобном объекте JS?

Здравствуйте, как можно изменить значение переменной через массив в объекте. Узнал что можно через квадратные скобки, но по факту не работает

<script>
  let propName = '20';

const info = {
  10: {
    5: {
         [propName]: '50',
    }, 
 },
};
console.log(propName);  // 20

  </script>


Есть огромный массив объекта, вот кусочек:

var cena_rozALL = 0;
var roznicaIBP = cena_rozALL.toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 ');
var  silverIBP = Math.ceil(cena_rozALL - cena_rozALL * proc_sil).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 ');
var goldIBP = Math.ceil(cena_rozALL -  cena_rozALL * proc_gold).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 ');
var platinumIBP = Math.ceil(cena_rozALL - cena_rozALL * proc_plat).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 ');
var silver_skIBP = Math.ceil(cena_rozALL * proc_sil).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 ');
var gold_skIBP = Math.ceil(cena_rozALL * proc_gold).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 ');
var platinum_skIBP = Math.ceil(cena_rozALL * proc_plat).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 ');

const info = {
10: {
    5: {
      title: titleIbp10,
      description: descrIbp10,
	  silka_ibp: ssilkaIbp1,
	  kartinka_ibp: kartinkIbp1,
	  title2: titleAKB_7,
	  description2: descrAKB_7,
	  mnoj: '30 x',
      silka_akb: silka_akb_7,
	  kartinka_akb: kartinka_akb_7,
	  [cena_rozALL]: cena_roz5_10,
    },
    10: {
     title: titleIbp10,
      description: descrIbp10,
	  silka_ibp: ssilkaIbp1,
	  kartinka_ibp: kartinkIbp1,
	  title2: titleAKB_7,
	  description2: descrAKB_7,
	  mnoj: '30 x',
      silka_akb: silka_akb_7,
	  kartinka_akb: kartinka_akb_7,
	  [cena_rozALL]: cena_roz10_10,
    }, .....
} .... 
};


cena_rozALL = это значение которое будет разное для всех (а тут 720 вариаций). Это является базовой ценой товара. А те расчеты это скидки одного и того же товара. И взависимости от цены, меняются все эти расчеты скидок и т.д.
И другой вариант, рабочий

const info = {
10: {
    5: {
      title: titleIbp10,
      description: descrIbp10,
	  silka_ibp: ssilkaIbp1,
	  kartinka_ibp: kartinkIbp1,
	  title2: titleAKB_7,
	  description2: descrAKB_7,
	  mnoj: '30 x',
      silka_akb: silka_akb_7,
	  kartinka_akb: kartinka_akb_7,
	  roznica: cena_roz5_10.toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 '),
	  silver: Math.ceil(cena_roz5_10 - cena_roz5_10 * proc_sil).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 '),
	  gold: Math.ceil(cena_roz5_10 -  cena_roz5_10 * proc_gold).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 '),
	  platinum: Math.ceil(cena_roz5_10 - cena_roz5_10 * proc_plat).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 '),
	  silver_sk: Math.ceil(cena_roz5_10 * proc_sil).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 '),
	  gold_sk: Math.ceil(cena_roz5_10 * proc_gold).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 '),
	  platinum_sk: Math.ceil(cena_roz5_10 * proc_plat).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 '),
    },
    10: {
     title: titleIbp10,
      description: descrIbp10,
	  silka_ibp: ssilkaIbp1,
	  kartinka_ibp: kartinkIbp1,
	  title2: titleAKB_7,
	  description2: descrAKB_7,
	  mnoj: '30 x',
      silka_akb: silka_akb_7,
	  kartinka_akb: kartinka_akb_7,
	 roznica: cena_roz10_10.toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 '),
	  silver: Math.ceil(cena_roz10_10 - cena_roz10_10 * proc_sil).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 '),
	  gold: Math.ceil(cena_roz10_10 -  cena_roz10_10 * proc_gold).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 '),
	  platinum: Math.ceil(cena_roz10_10 - cena_roz10_10 * proc_plat).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 '),
	  silver_sk: Math.ceil(cena_roz10_10 * proc_sil).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 '),
	  gold_sk: Math.ceil(cena_roz10_10 * proc_gold).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 '),
	  platinum_sk: Math.ceil(cena_roz10_10 * proc_plat).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 '),
    }, .....
} .... 
};


Тоесть в каждой вариации нужно прописывать этот кусок кода
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Никак, вы чего-то очень странного хотите. Квадратные скобки используются для работы с объектом (получение или изменение значений его свойств), через них никак нельзя изменить значение переменной, которую вы в скобках используете.
Если вы хотите получить «50», то это делается так: info['10']['5'][propName]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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