最大/最小/平均按该顺序返回数组

时间:2015-07-04 17:39:50

标签: javascript arrays

谁能告诉我自己做错了什么?我打印的数组不是正确的顺序。我怎么称呼它?这是javascript。

给定一个数组x(例如[1,5,10,-2]),创建一个算法(指令集),返回一个具有最大值,最小值和平均值的数组([max,min,avg] 。[0,2,4]应该返回[4,0,2])。

我的代码:

api_event(NameOfAPI, Tag, ListOfArgs)

5 个答案:

答案 0 :(得分:2)

该功能应如下所示

function maxMinAvg(arr) {
    var max = arr[0];
    var min = arr[0];
    var sum = arr[0]; //changed from original post
    for (var i = 1; i < arr.length; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
        if (arr[i] < min) {
            min = arr[i];
        }
        sum = sum + arr[i];
    }
    return [max, min, sum/arr.length]; //changed from original post
}

答案 1 :(得分:1)

试试这个......

function maxMinAvg(arr) {
  var max = arr[0];
  var min = arr[0];
  var sum = 0 ;
 arr.forEach(function(value){
     if(value > max)
       max = value;
     if(value < min)
       min = value;
     sum +=value;
 })
 var avg = sum/arr.length;
return [max,min,avg];

}

答案 2 :(得分:0)

你已经拥有了min,max和avg的值(你有总和,所以你可以计算它)。只需创建一个新数组(不是原始的arr),将这些值(min,max和avg)添加到它并返回它。

答案 3 :(得分:0)

您的代码没有以错误的顺序返回值,它返回原始数组而不是具有max,min和average的数组。

看起来这些项目属于wron g顺序的原因是您选择的测试数据恰好与您期望的结果相似。如果您选择输入与输出不相似的数据,例如[1,2,3,4,100],您会看到返回相同的数组。

只需使用值创建一个新数组并将其返回:

return [ max, min, avg ];

编辑:

使用您发布的新代码,我发现了一些问题:

  • 它在计算所有项目总和之前的平均值。它只是使用第一项。
  • 它不会初始化sum变量,因此它将包含undefined。添加到结果时,结果将继续为undefined
  • sum变量不是本地变量,因此可能会干扰其他代码。
  • 它正在将数组推入数组中,因此您将得到一个或多个数组而不是数组。
  • 它使用minmaxavg变量,就好像它们是结果中的数组一样。

解决这个问题,你得到:

function maxMinAvg(arr) {
    var max = arr[0];
    var min = arr[0];
    var sum = arr[0];
    for (var i = 1; i < arr.length; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
        if (arr[i] < min) {
            min = arr[i];
        }
        sum = sum + arr[i];
    }
    var avg = sum / arr.length;
    return [max, min, avg];
}

答案 4 :(得分:0)

不确定这是否有效,但您可以使用arr.sort()函数对其进行排序,并且您有最小值和最大值,然后只需添加所有值并找到平均值。

function maxMinMean(arr){
    arr.sort();
    var sum = 0;
    for(var i=0, i<arr.length, i++){
        sum = sum + +arr[i];
    };
    return [+arr[length-1], +arr[0], sum/arr.length];
};

这假设您尝试使用数组来执行此操作(如果数组中的数字存储为字符串,它也会起作用) 没有测试过,但应该可以正常工作。