关于javascript:创建一个数字填充数字1到10000,然后将所有这些数字相加

Make an array filled with numbers 1 to 10000 and then sum all of those numbers

本问题已经有最佳答案,请猛点这里访问。

我怎样才能把它变成一个函数,它接受一个任意长度的数组并给出总数?

1
2
3
4
5
6
7
8
var points = new Array(100);
for (var i = 0; i < 100; i++) {
    points[i] = i + 1;
}

for(var i = 0; i < points.length; i++) {
    console.log(points[i]);
}

您可以在两个循环中完成它,但也可以只做一个循环来完成这两个任务。

1
2
3
4
5
6
var array = [],
    sum = 0;
for (var i = 1; i <= 10000; i++) {
    array[i-1] = i;
    sum += i;
}

如果要概括查找数组和的任务,可以使用如下函数:

1
2
3
4
5
6
function arraySum(array) {
    var sum = 0;
    for (var i = 0; i < array.length; i++)
        sum += array[i];
    return sum;
}

对于那些能理解的人来说,使用reduce是最好的答案:

1
2
3
function arraySum(array) {
    return array.reduce(function(a,b){return a+b}, 0);
}


1
2
3
4
var result = 0;
for(var i = 0; i < points.length; i++) {
        result += points[i];
    }

函数,它接受任意长度的数组并返回和:

1
2
3
4
5
6
7
function sumArray(arrayToSum){
    var result = 0;
    for(var i = 0; i < arrayToSum.length; i++) {
        result += points[i];
    }
    return result;
}


只需使用一个变量,就可以使用for循环本身获得和。

1
2
3
4
5
6
7
8
9
10
11
12
var points = new Array(100),
  sum = 0;

for (var i = 0; i < 100; i++) {
  points[i] = i + 1;
}

for (var i = 0; i < points.length; i++) {
  sum += points[i];
}

console.log(sum);

您可以使用fill()forEach()来生成数组,使用reduce()来得到和,从而减少这两个操作。

1
2
3
4
5
6
7
8
9
10
11
12
var points = new Array(10000); // create an array of size 10000
points.fill(1); // fill it with 1 which helps ti=o iterate using foreach

points.forEach(function(v, i) { // iterate the array, you can also use simple for loop here
  points[i] = v + i; // update the value
});

var sum = points.reduce(function(a, b) { // find sum
  return a + b;
});

console.log(sum);

使用for环和reduce()

1
2
3
4
5
6
7
8
9
10
11
var points = []; // initialize an array

for (var i = 1; i <= 10000; i++) {
  points.push(i);
}

var sum = points.reduce(function(a, b) { // find sum
  return a + b;
});

console.log(sum);

此外,您还可以在单for循环中进行加法和数组创建。

1
2
3
4
5
6
7
8
9
var points = [], // initialize an array
  sum = 0;

for (var i = 1; i <= 10000; i++) {
  points.push(i); // pushing value to array
  sum += i; // summation
}

console.log(sum, points);


1
2
3
4
5
6
7
8
9
10
11
function arraysum(arraylength) {
   var arraysum = 0;
   var array1 = new Array();
   for(i=1; i<=arraylength; i++) {
      array1.push(i);
   }
   for(i = 0; i< array1.length; i++) {
      arraysum += array1[i];
   }
   return arraysum;
}

现在当你调用函数

1
arraysum(x)

传递函数一些变量或整数,例如1、15或10000。


一个非常优雅和紧凑的解决方案是使用reduce。它通过将每个值和一个起始值应用于一个给定函数来累积数组值以将其减少为一个值,该函数的返回值用作下一次迭代的起始值:

1
2
3
4
function sum (a, b) {
    return a + b;
}
console.log(points.reduce(sum, 0));

如果需要支持较旧的浏览器(如IE 8),可以使用polyfill。

如果还需要创建数字列表,可以使用

1
2
3
4
var points = Array.apply(0, Array(10000))
    .map(function (current, index) {
      return index + 1;  
  });

它创建一个包含10000个元素的数组,并为每个元素分配索引+1。