从多个项目中获取平均值

时间:2012-10-16 18:37:11

标签: javascript

假设我有一个像这样的列表

[name1, number1], [name2, number2], [name3, number 3]

例如

[John, 86], [Joe, 94], [bob, 45], [andy, 34]

我正在尝试打印80以上的所有人并获得平均值。所以在这种情况下我想输出

John Joe 90

我可以使用的最简单的结构是什么?

5 个答案:

答案 0 :(得分:1)

如果你有一个数组数组,每个数组都有两个元素,第一个是名字,第二个是年龄,你可以像这样表示:

var people = [["John", 86], ["Joe", 90], ["Bob", 45], ["Andy", 34]];

你可以带80岁以上的人,获取他们的名字列表,并平均他们的年龄:

var sum = 0;
var length = 0;
var names = [];
for(var i = 0; i < people.length; i++) {
  var person = people[i];
  if(person[1] >= 80) {
    sum += person[1];
    length++;
    names.push(person[0]);
  }
}
alert(names.join(" "));  //alerts "John Joe"
alert(sum / length);     //alerts 88

您可以在行动on this jsFiddle page上看到它。

答案 1 :(得分:1)

这看起来像一个数组数组。你可以做的是迭代父数组,然后检查每个嵌套数组。如果嵌套数组在第二个点([1])中包含大于80的分数,那么您可以将该分数添加到第一个点([0])中的总和该名称到字符串。添加完所有内容后,将总数除以加法值,并将其放在字符串末尾,并在其中添加名称。

function GetNameAverageString(numberOfUsers,arrayOfData){
 var runningCount = 0;//number of users added to return string
 var total = 0;//total of scores from added users
 var names = "";//return string which will contain names and average
 for( var nestedArray in arrayOfData ){
  if( parseInt(arrayOfData[nestedArray][1]) < 81 ) continue;//only scores over 80
  names += arrayOfData[nestedArray][0] + " ";//append the name to the return string
  runningCount++;//add to the count of users recorded
  total += parseInt(arrayOfData[nestedArray][1]);//add to the score total
 }
 var average = total / runningCount;//calculate average score based on users added
 names += average.toString();//append the score to the end of the names
 return names;
}

答案 2 :(得分:0)

var dataArray = [["John", 86], ["Joe", 94], ["Bob", 45], ["Andy", 34]];
var count = 0;
var total = 0;
var peopleOverEighty = "";
for(var i = 0; i < dataArray.length; i++) {
  if(dataArray[i][1] > 80) {
    count++;
    total += dataArray[i][1];
    peopleOverEighty += dataArray[i][0] + " ";
  }
}
alert(peopleOverEighty + " " + (total/count));

答案 3 :(得分:0)

您似乎有这样的数据结构:

var data = [[john, 86], [joe, 94], [bob, 45], [andy, 34]];

并且您希望过滤掉80以下的所有人:

data = data.filter(function(value,index,array){return (value[1]<80);});

获得平均值:

var total = 0;
for(var i = 0; i < data.length ; i++){
    total += data[i];
}
avg = total/data.length;

这是你所需要的吗?

答案 4 :(得分:0)

  

“我可以使用的最简单的结构是什么?”

Array.prototype.reduce就是为了这个:

var arr = [["John", 86], ["Joe", 94], ["bob", 45], ["andy", 34]],
    result;
(result = arr.reduce(function(ret, arr) {
    if (arr[1] >= 80) {
        ret[0].push(arr[0]);
        ret[1] += arr[1];
    }
    return ret;
}, [[], 0]))[1] /= result[0].length;

您可以从MDN获得.reduce()垫片。