2016-07-19 5 views
1

Ich habe eine Frage zu einer Datenstruktur-Zuordnungsliste/einer einfach verknüpften Liste, die nur zum Kopf hinzugefügt wird. Die set-Funktion soll (mehrere) Schlüssel-Wert-Paare setzen und die get-Funktion sollte diese Paare bekommen- Ich verstehe nicht, wie man den Kopf (der zunächst Null sein soll) zu einem Objekt und seit der neu erstellen Knoten wird der "neue" Kopf - ich verstehe nicht, wie ich den "alten" Kopf mit seinen Schlüssel-Wert-Paaren bewegen kann. Happy über jede Hilfe! Vielen Dank!Datenstrukturverknüpfungsliste - Wie erstellt man Kopfschlüsselwertpaare?

Dies ist mein Code (nicht viel, aber weiß nicht, wie von hier überhaupt gehen zu)

function List() { 
this.head=null; 
} 

function ListN (key, value, next) { 
    this.key = key; 
    this.value = value; 
    this.next = next; 
} 
Alist.prototype.set = function (key, value) { 
    // this.key=value; 
    var newNode=new ListN(key, value); 
    this.head=newNode; 
}; 

Alist.prototype.get = function (key) { 
    return this.key; 
}; 

smallList = new List(); 

Antwort

1

Sie fast da waren. Sie haben beim Aufruf von newListN einen vorherigen Knoten verpasst.

var newNode = new ListN(key, value, this.head); 
//         ^^^^^^^^^ 

function List() { 
 
    this.head = null; 
 
} 
 

 
List.prototype.set = function (key, value) { 
 

 
    function ListN(key, value, next) { 
 
     this.key = key; 
 
     this.value = value; 
 
     this.next = next; 
 
    } 
 

 
    var node = this.head; 
 
    while (node) { 
 
     if (node.key === key) { 
 
      node.value = value; 
 
      return; 
 
     } 
 
     node = node.next; 
 
    } 
 
    this.head = new ListN(key, value, this.head); 
 
}; 
 

 
List.prototype.get = function (key) { 
 
    var node = this.head; 
 
    while (node) { 
 
     if (node.key === key) { 
 
      return node.value; 
 
     } 
 
     node = node.next; 
 
    } 
 
}; 
 

 
var smallList = new List(); 
 

 
smallList.set('one', 'abc'); 
 
console.log(smallList); 
 
smallList.set('two', 'def'); 
 
console.log(smallList); 
 

 
console.log(smallList.get('one')); 
 
console.log(smallList.get('two')); 
 
console.log(smallList.get('three')); 
 

 
smallList.set('two', 'xyz'); 
 
console.log(smallList);

+0

Danke Nina! Jetzt können mehrere Schlüsselwertpaare festgelegt, aber nicht abgerufen werden. Auch das Setzen/Abrufen von einem (nicht mehreren) Schlüsselwertpaaren funktioniert nicht - ich weiß nicht warum, aber ich werde nicht definiert. – javascript2016

+0

Vielen Dank - alles funktioniert jetzt. Was hier passiert (ich lerne Datenstrukturen, versuche es einfach zu verstehen) ist, dass zuerst der Kopf mit dem neuen Schlüsselwort "erstellt" wird, und dann fragen wir, ob head null ist oder erstellt wurde (= Wert hat), wenn ja wir fragen, ob es der gleiche Schlüssel ist und wenn ja wir zurückkommen und dann den Kopf bewegen, indem wir ihn als nächsten setzen - ist das korrekt? Außerdem müssen wir den Kopf zurückgeben, sonst würden wir, wenn wir den Kopf als nächsten setzen und den "vorherigen" nicht entfernen, irgendwie verloren gehen? – javascript2016

+0

rechts. Aber ein Problem tritt auf, Sie erhalten nur den ersten Wert mit dem gleichen Schlüssel. Zum Aktualisieren oder Erstellen müssen Sie zuerst suchen, um Dubletten zu vermeiden. –

0

in einem Schlüsselwert Objekt, das Sie immer einen Schlüssel haben sollte, so KISS-Prinzip verwenden:

var object = {}; 

object['aKey'] = 'some value'; 
object['otherKey] = 'other value'; 

wenn das, was Sie wollen, ist Objekte zu speichern, ein Array verwenden:

var myArray = []; 

myArrray.push({'key': 'value'}); 
myArrray.push({'key': 'value'}); 
myArrray.push({'key1': 'value1'}); 

wenn Sie eine Menge von Werten für einen Schlüssel wollen:

var object = {}; 

if(!object.hasOwnProperty('aKey')){ 
    object['aKey'] = []; 
} 

object['aKey'].push('value'); 

Javascript ist einfach, halten so einfach es :)

+0

seine eine Übung über Listendatenstruktur Verein, so kann ich nicht nur verwenden, js, wie ich sonst tun würde. – javascript2016