代码之家  ›  专栏  ›  技术社区  ›  Daniel R.

在Javascript数组中相互除数

  •  1
  • Daniel R.  · 技术社区  · 9 年前

    我有一组随机生成的数字。 我想创建一个函数来划分所有这些数字。基本上,假设数组中有5个数字[5,7,6,8,2],我希望输出等于5/7/6/8/2

    array = [5, 7, 6, 8, 2];
    
    var total = 1;    
    for(var i = 0; i < array.length; i++) {
    total = array[i] / total; 
    }
    
    return total;
    

    这是我迄今为止所做的,但输出不是正确的。知道我哪里做错了吗?

    4 回复  |  直到 9 年前
        1
  •  8
  •   CollinD    9 年前

    你的数学基本上是倒退了。用你的方法,你想逐步除以总数,而不是逐步除以总数。

    var total = array[0];
    for (var i = 1; i < array.length; i++) 
        total = total / array[i];
    return total;
    
        2
  •  5
  •   Ian Ramos    9 年前

    试试这个。它使用阵列的 reduce 方法和es6 arrow functions 这使它成为一个单一的衬垫。您可以使用 babel 将es6语法转换为es5。

    var arr = [5, 7, 6, 8, 2];
    
    arr.reduce((prev,curr) => prev/curr);
    

    ES5版本:

    var arr = [5, 7, 6, 8, 2];
    
    arr.reduce(function(prev, curr) {
      return prev/curr;
    });
    

    正如你所看到的 in the docs 大堆reduce()将把一个值列表减少为一个值,循环遍历列表,应用回调函数,并返回一个新列表。在该回调中,您可以访问四个参数:

    上一个值: 如果在回调函数之后传递一个参数,previousValue将假定该值,否则它将是数组中的第一项。

    当前值: 循环中的当前值。

    索引: 循环中当前项的索引。

    数组: 列表

        3
  •  0
  •   rkrishnasanka    9 年前

    好吧,你把总数搞砸了,你一直在把每个新数字除以结果。您只需翻转“/”运算符即可。

    array = [5, 7, 6, 8, 2];
    
    var total = array[0];    
    for(var i = 1; i < array.length; i++) {
    total = total/array[i]; 
    }
    
    return total;
    
        4
  •  -3
  •   Sam Stump    9 年前

    试试这个。。。

    array = [5, 7, 6, 8, 2];
    var total = array[0];
    for(var i = 1; i < array.length; i++) {
        total = array[i] / total; 
    }
    return total;