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

Javascript 按该顺序返回的最大/最小/平均数组,javascript,arrays,Javascript,Arrays,谁能告诉我我做错了什么?我打印阵列的顺序不对。我怎么称呼它呢?顺便说一下,这是javascript 给定一个数组x(例如[1,5,10,-2]),创建一个算法(指令集),该算法返回一个包含最大值、最小值和平均值([max,min,avg])的数组。ex[0,2,4]应返回[4,0,2]) 我的代码: function maxMinAvg(arr) { var newarr= []; var max = arr[0]; var min = arr[0]; sum =

谁能告诉我我做错了什么?我打印阵列的顺序不对。我怎么称呼它呢?顺便说一下,这是javascript

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

我的代码:

function maxMinAvg(arr) {
    var newarr= [];
    var max = arr[0];
    var min = arr[0];
    sum = sum + arr[0];
    var avg = sum/arr.length;
    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];
    }
    newarr.push([max[i],min[i],avg[i]]);
}

return newarr;
函数maxMinAvg(arr){
var newarr=[];
var max=arr[0];
var min=arr[0];
sum=sum+arr[0];
var avg=总和/平均长度;
对于(变量i=1;i最大值){
max=arr[i];
}
如果(arr[i]
您已经有了最小值、最大值和平均值(您已经有了总和,可以进行计算)。只需创建一个新数组(而不是原始arr),将这些值(最小值、最大值和平均值)添加到其中并返回。

您的代码没有按错误的顺序返回值,而是返回原始数组,而不是返回具有最大值、最小值和平均值的数组

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

只需使用这些值创建一个新数组并返回它:

return [ max, min, avg ];
编辑: 使用您发布的新代码,我发现了一些问题:

  • 它在计算所有项目的总和之前先计算平均值。它只是使用第一项
  • 它不会初始化
    sum
    变量,因此它将包含
    未定义的
    。当添加到它时,结果将继续是
    未定义的
  • sum
    变量不是局部变量,因此它可能会与其他代码相互干扰
  • 它将一个数组推入数组中,因此您将得到一个或多个数组作为结果,而不是数组
  • 它将
    min
    max
    avg
    变量作为数组放入结果中
解决这个问题,你会得到:

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];
}
函数maxMinAvg(arr){
var max=arr[0];
var min=arr[0];
var总和=arr[0];
对于(变量i=1;i最大值){
max=arr[i];
}
如果(arr[i]
函数应该如下所示

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
}
函数maxMinAvg(arr){
var max=arr[0];
var min=arr[0];
var sum=arr[0];//从原始post更改
对于(变量i=1;i最大值){
max=arr[i];
}
如果(arr[i]
试试这个

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];
函数maxMinAvg(arr){
var max=arr[0];
var min=arr[0];
var总和=0;
arr.forEach(函数(值){
如果(值>最大值)
最大值=最大值;
如果(值<最小值)
最小值=数值;
总和+=数值;
})
var avg=总和/平均长度;
返回值[最大值、最小值、平均值];

}

不确定这是否有效,但您可以使用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];
};
函数maxMinMean(arr){
arr.sort();
var总和=0;

对于(var i=0),为什么返回数组而不修改它?返回原始数组。<代码>返回[max,min,avg];< /> >我如何以max、min、avg顺序返回它?考虑在函数中做任何事情之前检查数组长度,因为如果收到空数组,此代码将中断。