-2

2 つの配列を比較する JavaScript アプリケーションを開発しています (2 番目の配列は、参照が削除されたプライマリ配列から生成されます)。アプリケーションの中心的な考え方は、現在のアレイ (プライマリ) をセカンダリ (最後に保存された状態) と比較して、変更を識別し、それに応じて動作することです。私が直面している問題は、プライマリ配列とセカンダリ配列の値が同じになることがあります.htmlキャンバスを管理するために巨大なJavaScriptで遊んでいます。そのため、コードも投稿していません...

状況を説明しましょう: アレイ X -> プライマリ アレイ、マウスの移動で更新される アレイ Y -> 最後に保存された状態、マウス クリックが発生したときにのみ更新される

マウス クリックが発生すると、配列は同じになり、マウスを動かすと「Y」ではなく「X」が更新されます。マウスアップ アクションでは、'X' が 'Y' と比較され、すべての値が同じであることを確認します。画面の右上でマウスアップが発生すると、値が変化します。その時点で「Y」が更新されます。

時々うまくいきます。時々そうではありません..なぜだろうと思っています!

編集から 'Y' をロックする解決策、つまりロックのような解決策を考えています。

4

3 に答える 3

0

本当の問題は、予期しないときに Y の更新が行われていることであり、JavaScript をデバッグして理由を調べる必要があると思います。更新コードにブレークポイントを配置し、呼び出されるべきではないときにいつ呼び出されるかを確認すると、問題を修正できます。

大量のデータを処理している場合、イベントが遅延し、予期したときに発生しない可能性があります。

于 2013-09-06T10:40:42.037 に答える
0

実際には、問題は配列自体にはありません。オブジェクト (配列の項目) は、別の配列への参照によってコピーされます。代わりにそれらを複製する必要があります。JavaScriptには組み込みのメソッドも演算子もありませんが、すぐに使用できるソリューションを簡単にグーグルで検索できます。

プリミティブの配列があり、時折の変更からコードを保護Object.freezeしたい場合は、利用可能なときはいつでも使用できます (すべてのブラウザーでサポートされているわけではありません)。デバッグも役立つ場合がfreezeありますが、コード内で変更が実行され、実行されるべきではない正確な場所を特定するのに役立つ場合があります。

申し訳ありませんが、あなたの質問に答えていない場合は、少しあいまいに見えます。

于 2013-09-06T10:40:18.347 に答える
0

mousedownイベントと混乱していると思いますclick

clickイベントのみのご利用をおすすめします。だからここにアルゴリズムがあります -

var primary, secondary;

var equal = function(a,b){
    //Code for comparing 2 arrays
    if(a.length !== b.length) return false
    for(var i = 0 ; i < a.length; i++){
        if(a[i] !== b[i]) return false
    }
    return true;
};
window.addEventListener('mousemove', function(){
   primary = getData();//Some function which gets the data
});


window.addEventListener('click', function(){
    if(equal(primary, secondary) === true){
        //Perform some action 
    }else{
        //Array has been update
        //Perform some action
    }
    //update secondary array
    secondary = primary.slice(0);
});
于 2013-09-06T10:48:12.487 に答える