[英]Max/Min/Avg returning array in that order
誰能告訴我我做錯了什么? 我打印數組的順序不正確。 我怎么稱呼它不同? 順便說一句,這是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;
該功能應如下所示
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
}
嘗試這個...
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];
}
你已經有了min,max和avg的值(你有總和所以你可以計算它)。 只需創建一個新數組(不是原始的arr),將這些值(min,max和avg)添加到它並返回它。
您的代碼沒有以錯誤的順序返回值,它返回原始數組而不是具有max,min和average的數組。
看起來這些項目屬於wron g順序的原因是您選擇的測試數據恰好與您期望的結果相似。 如果您選擇輸入與輸出不相似的數據,例如[1,2,3,4,100]
,您會看到返回相同的數組。
只需使用值創建一個新數組並將其返回:
return [ max, min, avg ];
使用您發布的新代碼,我發現了一些問題:
sum
變量,因此它將包含undefined
。 添加到它時,結果將繼續undefined
。 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];
}
不確定這是否有效但你可以使用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];
};
這假設您正在嘗試使用數組(如果數組中的數字存儲為字符串,它也可以工作)沒有測試它但應該正常工作。
function maxMinMean(arr: number[]) {
if (!arr.length) return [NaN,NaN,NaN];
arr.sort((a,b)=>a-b);
return [
arr.slice(-1)[0],
arr[0],
arr.reduce((sum, x) => sum + x,0) / arr.length,
];
}
如果您不想修改原始數組
function maxMinMean(arrIn: number[]) {
if (!arrIn.length) return [NaN,NaN,NaN];
var arr =[...arrIn].sort((a,b)=>a-b);
return [
arr.slice(-1)[0],
arr[0],
arr.reduce((sum, x) => sum + x,0) / arr.length,
];
}
如果你想要定點字符串
function maxMinMean(arr: number[]) {
if (!arr.length) return [NaN,NaN,NaN];
arr.sort((a,b)=>a-b);
return [
arr.slice(-1)[0],
arr[0],
arr.reduce((sum, x) => sum + x,0) / arr.length,
].map(f=>f.toFixed(2));
}
一個更優雅的解決方案,通過圖書館:
import {map, pipe} from 'iter-ops';
import {numberStats} from './extras';
const input = [1, 5, 10, -2];
const i = pipe(input, numberStats(), map(a => [a.max, a.min, a.avg]));
console.log(...i); //=> [ 10, -2, 3.5 ]
上述解決方案基於iter-ops庫,加上來自extras的自定義numberStats運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.