【问题标题】:Make an array filled with numbers 1 to 10000 and then sum all of those numbers [duplicate]制作一个填充数字 1 到 10000 的数组,然后将所有这些数字相加 [重复]
【发布时间】:2016-09-21 02:24:40
【问题描述】:

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

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

【问题讨论】:

    标签: javascript


    【解决方案1】:

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

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

    如果你想概括求和的任务,你可以使用这样的函数:

    function arraySum(array) {
        var sum = 0;
        for (var i = 0; i < array.length; i++)
            sum += array[i];
        return sum;
    }
    

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

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

    【讨论】:

    • “我不确定为什么这里需要数组” --- 因为他们正在学习如何编程,这是他们的任务。
    • 我添加了一个答案,展示了如何在数组已经存在时创建一个执行相同操作的函数。
    【解决方案2】:

    您可以通过使用变量来使用 for 循环本身获得总和

    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() 来获得总和

    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 loopreduce()

    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 循环中进行添加和数组创建

    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);

    【讨论】:

    • 有人学习了编程基础,然后你使用reduceforEach。你真的认为这对 OP 有帮助吗?
    • 为什么仅仅因为你是新手就应该使用某种语言的任意子集?
    • @rnevius 因为 OP 学习了算法的基础知识,即:如何将任务拆分为子任务并逐步分别解决它们。这个答案对OP没有帮助。
    • fill() 有点毫无意义。
    • @zerkms,但你怎么能确定所有未来的读者都会像今天的 OP 一样是新手?此外,有一天 OP 将不再是新事物,那么他可能会发现这个答案很有帮助。
    【解决方案3】:
    var result = 0;
    for(var i = 0; i < points.length; i++) {
            result += points[i];
        }
    

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

    function sumArray(arrayToSum){
        var result = 0;
        for(var i = 0; i < arrayToSum.length; i++) {
            result += points[i];
        }
        return result;
    }
    

    【讨论】:

    • 不再需要遍历数组。请改用reduce
    • @JoachimSchirrmacher 伙计们,说真的,OP 是一个新手——他们学习如何使用循环。请暂时忘记Array.prototype.reduce
    • @zerkms你怎么能把这个答案变成一个函数,它接受一个任意长度的数组并给你总数?
    • @coderman929 对此有何想法?
    • @Michael Melin 为您编辑了答案以包含请求的功能
    【解决方案4】:
    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;
    }
    

    现在当你调用函数时

    arraysum(x)
    

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

    【讨论】:

    • 我在你的代码中没有看到数组。
    • 结果永远是0
    • @zerkms - 会是NaN
    • 我不认为我必须给出确切的答案,但确实如此
    • @charlietfl 因为这是 OP 正在解决的任务: 1. 创建一个数组并用数字填充 2. 对它们求和。人,说真的,学习是解决基本有意义任务的迭代过程
    【解决方案5】:

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

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

    如果您需要支持旧版浏览器(例如 IE 8),您可以使用Polyfill

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-10-22
      • 2022-01-04
      • 2015-06-03
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      相关资源
      最近更新 更多