假设我有一个这样的列表
[name1, number1], [name2, number2], [name3, number 3]
例如
[John, 86], [Joe, 94], [bob, 45], [andy, 34]
我正在尝试打印出 80 号以上的每个人并获得平均值。所以在这种情况下我想输出
John Joe 90
我可以用来执行此操作的最简单的结构是什么?
假设我有一个这样的列表
[name1, number1], [name2, number2], [name3, number 3]
例如
[John, 86], [Joe, 94], [bob, 45], [andy, 34]
我正在尝试打印出 80 号以上的每个人并获得平均值。所以在这种情况下我想输出
John Joe 90
我可以用来执行此操作的最简单的结构是什么?
如果你有一个数组数组,每个数组有两个元素,第一个是名字,第二个是年龄,你可以这样表示:
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
这看起来像一个数组数组。您可以做的是遍历父数组,然后检查每个嵌套数组。如果嵌套数组在第二个点 ( ) 中包含大于 80 的分数,[1]
那么您可以将该分数添加到总分中,并将第一个点 ( [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;
}
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));
“我能用什么最简单的结构来做到这一点?”
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()
shim。
你似乎有这样的数据结构:
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;
这是你要求的吗?