изменить const в массив - PullRequest
0 голосов
/ 07 марта 2020

Это небольшое расширение кода, который CertainPerformance написал здесь: произведение последовательности (факториал) javascript

Этот следующий код (см. Фрагмент) вычисляет последовательные продукты и отслеживает кумулятивных сумм для 2 значений переменной b, но если бы я добавил дополнительные числа в массив var b и добавил бы больше cumsum (например, cumsum2 , , он стал бы достаточно длинным) cumsum3 , ..) и nHourCum (например, nHourCum2 , nHourCum3, ..)

Я хочу написать const cumsum и const nHourCum как массивы. Идея состоит в том, чтобы избежать добавления cumsum1, cumsum 2 . Я попытался написать:

const cumsum = [cumsum0 + b[0] * nHour, cumsum0 + b[1] * nHour];

и аналогично для nHourCum:

const nHourCum = [cumsum[0] + nHour, cumsum[1] + nHour]

вместо

const cumsum = cumsum0 + b[0] * nHour;
const cumsum1 = cumsum0 + b[1] * nHour;
const nHourCum = cumsum + nHour;
const nHourCum1 = cumsum1 + nHour;

, но этот метод, похоже, не работает.

Что я сделал не так с массивами const?

var a = document.getElementById("a");
var b = [1000000, 2000000];
let time0 = 1; 
let cumsum0 = 0; 
for (var n = 2; n <= 96; n++) { 
  const nHour = time0 * (959 - 10*n)/(960 - 10*n) 
  const cumsum = cumsum0 + b[0] * nHour;
  const cumsum1 = cumsum0 + b[1] * nHour;
  const nHourCum = cumsum + nHour;
  const nHourCum1 = cumsum1 + nHour;
  if (n==2)
  {a.innerHTML += 'Hour ' + n + ': ' + b[0] * nHour + ' -- ' + (b[0] + b[0] * nHour) + ' ---- ' + b[1] * nHour + ' -- ' + (b[1] + b[1] * nHour) +'<br>';}
  else
  {a.innerHTML += 'Hour ' + n + ': ' + b[0] * nHour + ' -- ' + (b[0] + nHourCum) + ' ---- ' + b[1] * nHour + ' -- ' + (b[1] + nHourCum1) +'<br>';}
  time0 = nHour;
  cumsum0 = cumsum;
}
<body>
    <p id="a"></p> 
</body>

1 Ответ

1 голос
/ 07 марта 2020

Похоже, вы хотите сделать это:

const a = document.getElementById("a");
const b = [1000000, 2000000];
let nHour, cumsum, nHourCum, time0 = 1, cumsum0 = 0;

for (let n = 2; n <= 96; n++) {
  nHour = time0 * (959 - 10 * n) / (960 - 10 * n);
  cumsum = [cumsum0 + b[0] * nHour, cumsum0 + b[1] * nHour];
  nHourCum = [cumsum[0] + nHour, cumsum[1] + nHour];

  if (n == 2) {
    a.innerHTML += 'Hour ' + n + ': ' + b[0] * nHour + ' -- ' + (b[0] + b[0] * nHour) + ' ---- ' + b[1] * nHour + ' -- ' + (b[1] + b[1] * nHour) + '<br>';
  } else {
    a.innerHTML += 'Hour ' + n + ': ' + b[0] * nHour + ' -- ' + (b[0] + nHourCum[0]) + ' ---- ' + b[1] * nHour + ' -- ' + (b[1] + nHourCum[1]) + '<br>';
  }
  time0 = nHour;
  cumsum0 = cumsum[0];
}

Но я не могу понять почему. Как указано в комментариях к вашему сообщению, вы не можете переназначать или повторно определять константы, однако вы можете изменять изменяемые объекты, даже если они назначены постоянным переменным. Честно говоря, вам лучше изменить массивы, чем переназначать переменную на новую каждую l oop:

const a = document.getElementById("a");
const b = [1000000, 2000000];
const cumsum = [0, 0];
const nHourCum = [0, 0];
let time0 = 1, cumsum0 = 0, nHour;

for (let n = 2; n <= 96; n++) {
  nHour = time0 * (959 - 10 * n) / (960 - 10 * n);
  cumsum[0] = cumsum0 + b[0] * nHour;
  cumsum[1] = cumsum0 + b[1] * nHour;
  nHourCum[0] = cumsum[0] + nHour;
  nHourCum[1] = cumsum[1] + nHour;
  if (n == 2) {
    a.innerHTML += 'Hour ' + n + ': ' + b[0] * nHour + ' -- ' + (b[0] + b[0] * nHour) + ' ---- ' + b[1] * nHour + ' -- ' + (b[1] + b[1] * nHour) + '<br>';
  } else {
    a.innerHTML += 'Hour ' + n + ': ' + b[0] * nHour + ' -- ' + (b[0] + nHourCum[0]) + ' ---- ' + b[1] * nHour + ' -- ' + (b[1] + nHourCum[1]) + '<br>';
  }
  time0 = nHour;
  cumsum0 = cumsum[0];
}
<p id="a"></p>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...