2013-08-28 54 views
1

我有一个关于一群人的相关信息的数组:名称,现状,新的点,最后事件点计算积分的平均值的阵列 - 的Javascript

例子:

var group = new Array(); 
group[0] = "John Doe,beginer,14,7"; 
group[1] = "Lois Lane,advanced,13,9"; 
group[2] = "Bruce Waine,advanced,17,10"; 

我需要一个函数来计算新点的平均值。

对于前面的示例的平均值将是(14 + 13 + 17)/ 3 = 14.66666666666667

+2

你是否有理由将值存储在字符串中?通过使用JSON,您可以让自己更轻松。 – Rick

+1

难道不是布鲁斯韦恩吗? –

回答

1

尝试以下方法:在

function groupAverage(group) { 
    var sum = 0; 
    var count = group.length; 

    for (var i in group) { 
     sum += parseInt(group[i].split(',')[2], 10); 
    } 

    return sum/count; 
} 
+0

不要忘了parseInt(group [i] ...,10)中的基数参数; –

+0

@ToreHanssen好点,我添加了它。 – Phylogenesis

+0

你也没有设置计数,这将始终返回一个错误 – Rick

1

分割字符串,并且得到的值,并将其转换数字。

var group = new Array(); 
group[0] = "John Doe,beginer,14,7"; 
group[1] = "Lois Lane,advanced,13,9"; 
group[2] = "Bruce Waine,advanced,17,10"; 
sum=0; 

for(var i in group) 
{ 
    sum=sum+Number(group[i].split(",")[2]); 

} 

console.log(sum/group.length); 
+0

这对数组增长时无用/对于任意数量的条目使用for循环作为提交的第一个答案。 –

+0

考虑到任意大小的数组,现在已经改变了。我打算提供解决方案的基本思路,这就是为什么我不考虑数组会增长的情况,因为我认为这将是显而易见的。 – sharat

2

它会轻松很多的赫克如果从字符串转换数据数组中的对象这将在两个方面有利于你:1)代码会更加易读,易懂,更容易保持,以及2)你不需要做一堆弦乐体操来抽出相关数据。

做这样的事情:

var group = [ 
    { name: 'John Doe', status: 'beginner', newPoints: 14, eventPoints: 7 }, 
    { name: 'Lois Lane', status: 'advanced', newPoints: 13, eventPoints: 9 }, 
    { name: 'Bruce Waine', status: 'advanced', newPoints: 17, eventPoints: 10 } 
]; 

function getAverageNewPoints(people) { 
    var count = people.length || 0, 
     average = 0; 

    for (var i = 0; i < count; i++) { 
    average += people[i].newPoints; 
    } 

    return average/count; 
} 

alert('The average of new points in the group is: ' + getAverageNewPoints(group)); 
0

您对此有一个糟糕的数据结构。你不想使用字符串。您也不应该使用Array构造函数。首先:

var group = [ 
    {name: "John Doe", rank: "beginner", points: 14, lastScore: 7}, 
    {name: "Lois Lane", rank: "advanced", points: 13, lastScore: 9}, 
    {name: "Bruce Wayne", rank: "advanced", points: 17, lastScore: 10}, 
], 
length = group.length, 
sum = 0, 
i; 

for (i = 0; i < length; ++i) { 
    sum += group[i].points; 
} 

return sum/length; // Or do something else with the result. 
        // I did no error checking. 

你可以使用一个对象的构造函数,而不是我用的是直列Object的,但是这是不是真的有必要。我只是好奇;你使用字符串作为默认值,还是使用字符串接口部分的教科书任务?

哦,其中一个原因使用[]代替new Array()是,当你构建Array,该值始终truthy,而[]是falsy。

我没有冒昧纠正布鲁斯的姓氏。