【问题标题】:change const into array将 const 更改为数组
【发布时间】:2020-03-06 22:21:53
【问题描述】:

这是CertainPerformance在此处编写的代码的略微扩展:product of a sequence (factorial) javascript

以下代码(参见 sn-p)计算连续乘积并跟踪 var b 的 2 个值的累积和,但如果我要在 var b 数组中添加更多数字并添加更多,则会变得很长 cumsum(例如 cumsum2cumsum3、..)和 nHourCum(例如 nHourCum2、nHourCum3 , ..)

我想将 const cumsumconst 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>

【问题讨论】:

  • 您的代码中没有数组(b 除外)。
  • 标题毫无意义。 const 是变量声明的一部分,它表示不能重新声明或重新分配。 const i = 0; 是有效的,并声明了一个变量 i,即数字 0。你如何“将其更改为数组”?

标签: javascript arrays constants


【解决方案1】:

看起来你想这样做:

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];
}

但我真的不明白为什么。正如您帖子下的 cmets 所指出的,您不能重新分配或重新声明常量,但是即使将可变对象分配给常量变量,您也可以更改它们。老实说,您最好更改数组,而不是在每个循环中重新分配一个新变量:

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];
}
&lt;p id="a"&gt;&lt;/p&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 2021-07-20
    • 2017-02-19
    • 1970-01-01
    • 2013-07-29
    相关资源
    最近更新 更多