3

私は今、数時間コードのチャンクをデバッグしようとしていて、頭を壁にぶつけて、最終的に、collection.findOne() 呼び出しの結果を変数に代入するコード内の場所に問題を突き止めました。前の行の同じ findOne() の console.log() で表示されるものとは異なるデータを提供します。

prePostState = function(thisStID) {  
  console.log(Students.findOne({_id:thisStID}));  
  var stTemp = Students.findOne({_id:thisStID});  
  console.log(stTmp);  
  var testsTemp = stTmp.tests;

コレクション オブジェクトには「tests」配列があります。この例では、配列には要素として 3 つのオブジェクトが含まれています。

両方の console.log() 行がこのようなものを返しますが

 Object {_id: "eXf9dqQbaemKS24Ti", name: "Student,Name", group: "none", site: "SiteName", tests: Array[3]}  

それぞれを展開すると、異なるデータが表示されます。最初のものは正しいテストを示しています: Array[3]、2 つ目はテストを示しています: Array[1]、そしてその配列内の単一の要素には、完全な配列内の一致する要素とは異なるデータもあります。

----更新----
さらにテストを行って、コードを少し変更しました。

prePostState = function(thisStID) {
  console.log(Students.find({_id:thisStID}).fetch()); //1
  var stTmp = Students.find({_id:thisStID}).fetch();
  console.log(stTmp);                                 //2
  console.log(stTmp[0].tests.length);                 //3
  for(var i = 0; i < stTmp[0].tests.length; i++) {
     console.log(stTmp[0].tests[i]);                  //4
  }  

1 返品:

[Object]
  0: Object
    _id: "AqLHB8hT8GxzQ7zyD"
    group: "none"
    name: "Student,Name"
    site: "SiteName"
    tests: Array[3]

2 返品:

[Object]
  0: Object
  _id: "AqLHB8hT8GxzQ7zyD"
  group: "none"
  name: "Student,Name"
  site: "SiteName"
  tests: Array[1]

3 返品:

3  

4 の for ループは 3 回繰り返され、tests 配列内の 3 つのオブジェクトのそれぞれが出力されます。

明らかに、これは必要なデータにアクセスできることを意味します。それ以外の

var testArray = stTmp.tests;

これにより、要素が 1 つだけの配列が残ります。stTmp.tests の長さを取得し、for ループを使用して各要素にインデックスでアクセスし、それらを testArray 変数に挿入するだけです。

だから私は続けることができますが、私はまだ私が見ている行動を理解していません. この時点で少しずつ進捗を進めていきたいと思っていますが、時間ができたら、これを再検討して、完全なコードを共有できる meteorpad やその他の形式で複製してみるかもしれません。

4

1 に答える 1