2014-11-24 11 views
5

Gibt es irgendeine Art von C# Wörterbuch in JavaScript. Ich habe eine App in angularjs, die Daten von einem MVC Web Api anfordert und sobald es dazu kommt, nimmt es einige Änderungen vor. Die Daten sind also ein Array von Objekten, das in der MVC Web Api als Dictionary von Objekten gespeichert wird, aber ich wandle es in eine Liste um, bevor ich es durch ein Netzwerk übergebe.C# Dictionary entspricht in JavaScript

Wenn ich das Wörterbuch direkt zu JSon konvertieren bekomme ich so etwas wie:

array = [ {Id:"1", {Id:"1", Name:"Kevin Shields"}}, 
      {Id:"2", {Id:"2", Name:"Natasha Romanoff"}} 
     ]; 

Nun, die Objekte sind ein wenig komplexer, aber Sie haben jetzt eine Idee. Das Problem ist, dass dieses Format noch schwieriger zu bedienen ist (ich habe alphabetische Schlüssel oder IDs). Gibt es ein Äquivalent zu einem Wörterbuch? Es ist ganz einfach zu tun, wie:

Object o = dictionary["1"]; 

Also das ist es, danke im Voraus.

+0

http://stackoverflow.com/questions/368280/javascript-hashmap-equivalent – Habib

+0

Wenn Sie davon ausgehen können, dass Schlüssel eindeutig sind, erstellen Sie einfach ein Objekt. Wenn Sie nicht können, müssen Sie zwei Arrays erstellen –

+0

Wenn Ihre Suchschlüssel eindeutige Zeichenfolgen sind (oder einfach in eindeutige Zeichenfolgen umgewandelt werden können), dann funktioniert das Javascript-Objekt gut zum Speichern und Nachschlagen der Schlüssel und Daten, die mit den Schlüssel. – jfriend00

Antwort

9

Sie haben zwei Möglichkeiten wirklich, obwohl beide im Wesentlichen das gleiche tun, es kann sich lohnen, ein wenig mehr here, das Lesen, die über assoziative Arrays (Wörterbücher) spricht, wenn Sie die Lösung maßzuschneidern:

var dictionary = new Array(); 
dictionary['key'] = 'value' 

Alternativ:

var dict = []; 

dict.push({ 
    key: 'key', 
    value: 'value' 
}); 
+0

Irgendein Grund für den Downvote? – ediblecode

+0

Die zweite funktionierte für mich! Vielen Dank. –

4

Ja, es heißt object. Objekte haben wie C# -Diktare Schlüssel und Werte. Schlüssel sind immer Zeichenfolgen.

In Ihrem Fall das Objekt würde wie folgt aussehen:

{ 
    "1": { 
     "Id": 1, 
     "Name":" Kevin Shields" 
    }, 
    "2": { 
     "Id": 2, 
     "Name": "Natasha Romanoff" 
    } 
} 

Der Standard ASP.net Serializer erzeugt hässlich JSON. Eine bessere Alternative wäre Json.NET.

1

Mein Beispiel:

var dict = new Array(); 
// add a key named id with value 111 
dict.id = 111; 
//change value of id 
dict.id = "blablabla"; 
//another way 
// add a key named name with value "myName" 
dict["name"] = "myName"; 
//and delete 
delete dict.id; 
delete dict["name"] 

//another way 
dict = { 
    id: 111, 
    "name": "myName" 
}; 

//And also another way create associate array 
var myMap = { key: [ value1, value2 ] }; 
3

Ich weiß, dass diese Frage etwas älter ist, aber in ES2015 gibt es eine neue Datenstruktur namens map, die einem Wörterbuch, das Sie in C# verwenden würden, sehr viel ähnlicher ist. Sie müssen also nicht einen als Objekt oder als Array vortäuschen.

Das MDN deckt es ziemlich gut ab.