1

JSON フィードから 2 つの配列を作成し、両方の平均値を計算しようとしています。まず、配列を作成する方法は次のとおりです。

$.getJSON('jasonfile.json', function(rawdata) {
  var array_one = [];
  var array_two = [];

  $.each(rawdata, function(i, entry) {
    if(entry["geslacht"] == "Man") {
      array_one.push(entry["key"]);
    else {
      array_two.push(entry["key"]);
    }
  )};
)};

これは正常に動作しますが、コンソールを見るarray_oneと、ある種のオブジェクトの配列のように見え、「array_two」が通常の配列のように見えます。したがって、次のように2つの平均を計算しようとすると:

var array_one_total = 0;
$.each(array_one, function() {
  array_one_total += this;
});

array_one_average = array_one_total/array_one.length;

正しい値と間違った値を取得します。array_onearray_two は正しい平均を表示しますが、コンソールには次のように "NaN" が記録されます。

コンソールでの Javascript の奇妙な結果

配列の形式に問題があるようですが、両方に同じ方法を使用しているため、2番目の値が正しいものを返す理由がわかりません。

以下は、両方のアレイをコンソールに直接記録した場合に何が起こるかを示した画像です。それらがさまざまな方法で表示されていることがわかります。

コンソールログ

さて、コード全体を求める多くの応答がありました。配列の数が多いと読みにくくなりますが、次のとおりです。

$.getJSON('propedeuse201112.json', function(rawdata) {
  var ucd_male = [];
  var ucd_female = [];
  var internetstandaarden_male = [];
  var internetstandaarden_female = [];
  var understanding_design_male = [];
  var understanding_design_female = [];
  var taal_in_context_male = [];
  var taal_in_context_female = [];
  var vormgeving_male = [];
  var vormgeving_female = [];
  var marketing_male = [];
  var marketing_female = [];
  var h_en_c_male = [];
  var h_en_c_female = [];
  var programmeren_male = [];
  var programmeren_female = [];
  var m_en_i_male = [];
  var m_en_i_female = [];
  var mediageschiedenis_male = [];
  var mediageschiedenis_female = [];
  var business_mapping_male = [];
  var business_mapping_female = [];
  var plug_and_play_male = [];
  var plug_and_play_female = [];
  var slc_male = [];
  var slc_female = [];

  $.each(rawdata, function(i, entry) {
    if(entry["geslacht"] == "Man") {
      ucd_male.push(entry["ucd"]);
      internetstandaarden_male.push(entry["internetstandaarden"]);
      understanding_design_male.push(entry["understanding design"]);
      taal_in_context_male.push(entry["Taal in context"]);
      vormgeving_male.push(entry["Vormgeving"]);
      marketing_male.push(entry["Marketing"]);
      h_en_c_male.push(entry["H&C"]);
      programmeren_male.push(entry["Programmeren"]);
      m_en_i_male.push(entry["M&I"]);
      mediageschiedenis_male.push(entry["Mediageschiedenis"]);
      business_mapping_male.push(entry["Business Mapping"]);
      plug_and_play_male.push(entry["Plug & Play"]);
      slc_male.push(entry["SLC"]);
    } else {
      ucd_female.push(entry["ucd"]);
      internetstandaarden_female.push(entry["internetstandaarden"]);
      understanding_design_female.push(entry["understanding design"]);
      taal_in_context_female.push(entry["Taal in context"]);
      vormgeving_female.push(entry["Vormgeving"]);
      marketing_female.push(entry["Marketing"]);
      h_en_c_female.push(entry["H&C"]);
      programmeren_female.push(entry["Programmeren"]);
      m_en_i_female.push(entry["M&I"]);
      mediageschiedenis_female.push(entry["Mediageschiedenis"]);
      business_mapping_female.push(entry["Business Mapping"]);
      plug_and_play_female.push(entry["Plug & Play"]);
      slc_female.push(entry["SLC"]);
    }

  });

  var ucd_male_total = 0;
  $.each(ucd_male, function(index,item) {
    ucd_male_total += parseInt(item);
  });
  ucd_male_average = ucd_male_total/ucd_male.length;

  var ucd_female_total = 0;
  $.each(ucd_female, function(index,item) {
    ucd_female_total += parseInt(item);
  });
  ucd_female_average = ucd_female_total/ucd_female.length;

  console.log(ucd_male);
  console.log(ucd_female);  

});

以下の構造rawdata(これは 1 つのエントリです):

[{"id":1,"geslacht":"Vrouw","totaal punten":60,"project      1":9,"ucd":6,"internetstandaarden":7,"understanding design":7,"Teamproject deel 1":6,"Taal in context":6,"Vormgeving":7,"Marketing":6,"Students in Motion":7,"Teamproject deel 2":7,"H&C":6,"Programmeren":7,"M&I":7,"Project 3":6,"Mediageschiedenis":6,"Business Mapping":7,"Plug & Play":7,"SLC":7,"Studieregie":8,"plaats":"JOPPE","geboortejaar":1990,"vooropleiding":"HAVO","vooropleiding afgerond in":2009},
4

3 に答える 3

2

コードにタイプミスの問題が含まれているようです。

var array_one_total = 0;
$.each(array_one, function() {
  array_one += this;
});

それはうまくいきません。私はあなたがそれをしたかったと思います:

var array_one_total = 0;
$.each(array_one, function(index, value) {
  array_one_total += value;
});

そして、あなたはについて話しますarray_twoが、これについてはコード行が1行しかありませんarray_two。だから私はどのように何かを含むことができませんarray_two

于 2012-11-24T17:48:02.730 に答える
1

コードに重大なタイプミスがいくつかあります

 $.each(rawdata, function(i, entry) {
    if(entry["geslacht"] == "Man") {
      array_one.push(entry["key"]);
    else {
      array_one.push(entry["key"]); /* <===== should be array_two*/
    }
  )};

var array_one_total = 0;
$.each(array_one, function() {
  array_one += this;/* <===== should be array_one_total*/
});
于 2012-11-24T17:50:25.340 に答える
0

に問題があるようですthis。代わりにフォローしてみてください。

$.each(array_one, function(index,item) {
     array_one += parseInt(item);
});

また、除算前に array_one が NAN かどうかを確認します。

于 2012-11-24T17:46:46.960 に答える