2017-03-02 5 views
-1

エクスプレス4をサーバーエンジンとして使用する。次の関数を実行すると、ウィンドウが応答しなくなります。コンソールにエラーはありません。エラーを提供しないJavascriptバグをデバッグする方法

function updateLoadedData(type, schedule, date) { 
    var dateYear = date.year() 
    var dateMonth = date.month() 
    var dateDate = date.date() 

    if (dateData[dateYear] == undefined) 
    dateData[dateYear] = new Array() 
    if (dateData[dateYear][dateMonth] == undefined) 
    dateData[dateYear][dateMonth] = new Array() 
    if (dateData[dateYear][dateMonth][dateDate] == undefined) 
    dateData[dateYear][dateMonth][dateDate] = new Array() 

    var output = ["hello", "stackoverflow"] 

    dateData[dateYear][dateMonth][dateDate] = output 
} 

私はこのバグの原因を突き止めようとしています。どんな助けもありがたい。前もって感謝します。それはあなたの最後の文に結びついているよう

+0

わかりませんが、この関数から何かを返す必要はありませんか? – Shilly

+0

[**デバッガ**](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/debugger)、[** console.log **](https:// developerブラウザーコンソール(ChromeのF12)を使用してスクリプトでブレークポイントを適用すると、何が起きているのかを特定できるはずです。 – Nope

+0

私はコードの原因となるエラーを単純化しました。これは、3D配列と一緒にやるべきことです。 –

答えて

1

問題は他の場所にある必要があります。このコードの実装を検討してください。エラーはありません。

あなたには{}と{}があります。あなたが厳格なモードにいる場合は、それも問題になるかもしれません。

var dateData = {}; 
 
var update = function updateLoadedData(type, schedule, date) { 
 
    var dateYear = date.year() 
 
    var dateMonth = date.month() 
 
    var dateDate = date.date() 
 

 
    if (dateData[dateYear] == undefined) 
 
    dateData[dateYear] = new Array() 
 
    if (dateData[dateYear][dateMonth] == undefined) 
 
    dateData[dateYear][dateMonth] = new Array() 
 
    if (dateData[dateYear][dateMonth][dateDate] == undefined) 
 
    dateData[dateYear][dateMonth][dateDate] = new Array() 
 

 
    var output = ["hello", "stackoverflow"] 
 

 
    dateData[dateYear][dateMonth][dateDate] = output 
 
}; 
 
update(null,null, { 
 
\t 'year' : function(){ return 2017;}, 
 
\t 'month' : function(){ return 3;}, 
 
\t 'date' : function(){ return 2;}, 
 
}); 
 
alert(JSON.stringify(dateData));

またdateDataもアレイとしないオブジェクトである場合、その配列の最初の2016個のキーがヌルになることに注意。ループをヌルエントリで処理しない場合、これをループすると、長い実行スクリプトの問題が発生する可能性があります。

これは、正確なインデックスを設定する代わりに.push()アレイにする必要があるため、アレイ内に「ホール」が発生する理由です。だから、私はあなたが3次元配列の代わりに入れ子になったオブジェクトを使用するほうが良いと思っています。

+0

ありがとうございます。私はこの機能を採用して働くことができました。 –

0

は私に見える:あなたは3-Dの2次元配列を拡張している

dateData[dateYear][dateMonth][dateDate] = output

私がこれをデバッグする方法は、その行をコメントアウトして、ウィンドウが応答可能なままであるかどうかを確認することです。その行が犯人であるかどうかをあなたに伝えます。そうであれば、console.logを追加して、dateDateの値が何かを確認することができます。おそらくそれは偽です。

また、多次元配列について学習することもできます。 This linkは良い出発点です。

また、他の人が指摘しているように、データを表現するための別の方法を検討してください。多次元配列(2を超えるesp)は、通常、異なる形式で表されます。

+0

これはエラーの原因ですが、修正してもエラーが発生します。コードを更新しました。私の修正は間違っている可能性があります。 –

+0

私の答えを更新しました。 – rasmeister

関連する問題