0

このようなリストがあるとしましょう

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

例えば

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

私は80番以上の全員を印刷して平均を求めようとしています。したがって、この場合、出力したい

John Joe 90

これを行うために使用できる最も単純な構造は何ですか?

4

5 に答える 5

1

配列の配列があり、それぞれに 2 つの要素があり、最初の要素が名前で、2 番目の要素が年齢である場合、次のように表すことができます。

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

この jsFiddle ページで実際の動作を確認できます。

于 2012-10-16T18:44:14.077 に答える
1

これは、配列の配列のように見えます。できることは、親配列を反復処理してから、ネストされた各配列をチェックすることです。ネストされた配列の 2 番目のスポット ( ) に 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;
}
于 2012-10-16T18:44:16.507 に答える
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;

.reduce()MDN から shim を入手できます。

于 2012-10-16T19:14:25.670 に答える
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));
于 2012-10-16T18:44:52.950 に答える
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;

これはあなたが要求したものですか?

于 2012-10-16T18:46:40.003 に答える