2016-09-13 6 views
0

グローバルオブジェクトにプッシュされているJavaScriptオブジェクトがあります。JavaScript - 固有のキーを持つオブジェクトを格納していますか?

var storedElement = { 
    element: currentElement, 
    parentElement: parentElement, 
    elementChild: currentChild 
} 

storedElementは、呼び出されたグローバル配列にプッシュされています。 pastLocations = []

私は本質的に要素のある場所の履歴を保存しようとしています。これを行うには、これらのプロパティをグローバル配列に格納する必要があります。同じ要素がすでに存在し、グローバルに同じ親を持っているなら、プッシュしたくないですが、親が異なる場合はプッシュしてください。

アイテムに固有のキーを配置する方法があるので、オブジェクト内のこの要素にすばやく効果的にアクセスできます。現時点では、私は現在、オブジェクトからデータを取得するために各ループごとにいくつか持っていますが、これは実用的なアプローチです。理想的には、グローバルにプッシュして要素を取得する1つの関数が必要です。

各オブジェクトに固有のキーを提供する場合、要素を知っていることに基づいてどのようなキーがわかるでしょうか?

+0

要素とparentElementをキーとし、そのオブジェクトを値として持つマップを使用できます。別の一意のキーは必要ありません。 –

+0

あなたの答えをお寄せいただきありがとうございます –

答えて

0

Javascriptでは、配列[...]は順序を保持しながら連続した値を格納し、インデックスを知っていれば高速アクセスを提供します。

オブジェクトまたは辞書{...}は、値をキーと一緒に、その順序を維持することなく格納し、キーを知っていれば高速アクセスを提供します。

個別の 'parent'を持つ要素を保存する必要がある場合は、親をキーとしてオブジェクトを使用できます。それらを順番にブラウズする必要がある場合は、配列とオブジェクトの両方を使用することをお勧めします。

storedElements = [] 
storedByParent = {} 

それぞれに格納する内容は、アプリケーションの要件によって異なります。あなたは、オブジェクトのコピーを保存することができる:

newEl = {element: ..., parent: parentElement, ...} 
storedElements.push(newEl) 
storedByParent[parentElement] = newEl 

それとも、配列のインデックスを格納してもよい:

storedElements.push(newEl) 
storedByParent[parentElement] = storedElements.length - 1 

それとも、単にその両親、あなたを追跡するために、簡単なブール値を格納することができます。見てきた:

storedElements.push(newEl) 
storedByParent[parentElement] = true 

オブジェクトのこの後者の使用は通常、それは数学的なオブジェクトに似ていますので、「設定」として知られている:あなたはmySet[12] = true百倍、セットを呼び出しても、いずれかの続き要素12に存在するか、または存在しない。

+0

鮮やかな答え多くのおかげで –

関連する問題