2

重複の可能性:
Javascript カスタム インデックス アクセサー

たとえば、Javascript で双方向にリンクされたリスト オブジェクトを作成する場合、配列のような方法でこの新しいリストを参照する方法はありますか?

たとえば、ノード 5 の値が必要な場合は、クエリを実行したいと思います

newLinkedList[5]

私がやってきたことをする代わりに、それは次のようなものです

newLinkedList.getNode(5)

基本的に、カスタム データ構造への参照を「きれいにする」方法はありますか、それともカスタム関数として毎回実行する必要がありますか?

4

4 に答える 4

3

Javascript の配列は、実際には、数値プロパティを特別に処理する単なるオブジェクトです。同じことを自分で行うこともできますが、現在 Javascript はこれらのインデックスに透過的に双方向アクセスするための単純なメカニズムを提供していません。名前付きメソッドを使用してオブジェクトの追加と削除を処理する必要がありますが、配列のようなインデックスを使用してオブジェクトを読み取ることでメリットを得ることができます。

単純なカスタム「Arrayish」オブジェクトの例を次に示します。

var ll_array = {};

ll_array.length = 0;

ll_array.addNode = function (newNode) {
    this[this.length] = newNode;
    this.length++;
};

ll_array.addNode('Foo');
ll_array.addNode('Bar');
console.log('Length: ' + ll_array.length);
console.log(ll_array);
console.log(ll_array[0]);

</p>

http://jsfiddle.net/rbmsJ/1/

于 2012-10-25T12:59:01.120 に答える
0

リストをトラバースし、トラバーサル内の各アイテムを配列要素に割り当てるブルートフォース方式は、最初に頭に浮かぶことです。

LinkedListオブジェクトがあると仮定します。また、HeadとNextというリストを反復処理する方法があると仮定しましょう。ここで、これは完全にテストされていないことに注意してください。次のような方法でプロトタイプtoArray()メソッドを作成できます。

LinkedList.prototype.toArray() = function () {   var array={};
                                                 var currentItem = list.head; 
                                                 while (currentItem!=null){
                                                     array.addNode(currentItem);
                                                     currentItem=currentItem.Next;
                                                 }
                                                 return array;
                                              }

明らかに、これは他の推定機能を考慮に入れる必要がありますが、アイデアはリンクリストをトラバースし、配列内の各要素への参照を配置して、それを返すことです。それが何らかの形で役立つことを願っています。

于 2012-10-25T13:02:55.973 に答える
0

あなたの質問から:

  1. オブジェクトは二重リンク リストに保存されます。
  2. n 番目の要素を取得する getNode(int n) メソッドを知っています。

配列スタイル [n] で n 番目の要素を取得できるようにする方法はありません。連結リストは配列ではないため、連結リスト内の要素は相互に連結されます。このデータ構造は、通常の配列や JavaScript スタイルの array:named プロパティとは異なります。

于 2012-10-25T13:18:23.070 に答える
-1

配列は、リンクのない二重リンクリストです。右にトラバースするにはインデックスをインクリメントし、左にトラバースするにはインデックスをデクリメントします。

基本的なリスト操作を実行するための一連の関数を自分で作成し、それでも単純なインデックスを使用して任意のaribtrary要素に到達する機能を使用できます。

于 2012-10-25T13:25:01.883 に答える