这可能是一个奇怪的问题,因为我有一个解决方案(如下),但希望有人能告诉我一个更简洁或可读的方法来做到这一点:
我创建了一个输出以下数组的循环:
[0,1,3,6,10,15,21,28,36,45,55,66,78,91]
数字之间的差距逐渐变大:
1-0 = 1
3-1 = 2
6-3 = 3
10-6 = 4
...
91-78 = 13
等
我是通过创建两个变量来实现的,step
跟踪差距大小,count
跟踪当前的位置'在差距。 count
计为零,然后将step
加1。
var output = [];
var step = 0;
var count = 0;
for (var i = 0; i < 100; i++) {
if (count == 0){
step += 1;
count = step;
output.push(i);
}
count -= 1;
}
答案 0 :(得分:2)
您可以尝试以下操作:
var output = [];
var total = 0;
for (var i=1; i < 100; i++) {
output.push(total);
total += i;
}
数字之间的差距只是每步增加一个,因此for循环应该能够跟踪这一变化。
答案 1 :(得分:0)
你应该跳过无用的迭代。如果您想要一个100个数字的序列,请使用
var output = [];
var step = 0;
for (var i = 0; i < 100; i++) {
step += i;
output.push(step);
}
如果你想要一般术语,
aₙ = ∑ⁿᵢ₌₀ i = n*(n+1)/2
所以你也可以这样做
var output = [];
for (var i = 0; i < 100; i++) {
output.push(i * (i+1) / 2);
}
答案 2 :(得分:0)
您可以使用此解决方案保存总助手变量:
var output = [0]
for (var i = 1; i < 14; i++) {
output.push(output[i - 1] + i)
}
console.log(output) // [ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91 ]
此解决方案考虑到添加计数器值的值已经存在于数组的最后位置。
也可以使用递归版本:
output = (function f(x) {
return x.length == 14 ? x : f(x.concat([x[x.length - 1] + x.length]))
})([0])
console.log(output); // [ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91 ]
这里不需要额外的计数器变量。我使用concat
,因为它返回一个我需要递归调用的数组,其中push
返回新的数组长度。 concat
的参数是一个数组,其中一个元素包含要添加的新值。
尝试online