2014-11-24 68 views
5

JavaScript中是否存在任何种类的C#字典?我有一个应用程序在angularjs中请求来自MVC Web Api的数据,一旦它得到,它会对它进行一些更改。所以数据是一个对象数组,它作为一个对象字典存储在MVC Web Api中,但是我在将它传递给网络之前将其转换为列表。C#在JavaScript中等效的字典

如果我直接转换字典以JSON我得到的是这样的:

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

好对象是稍微复杂一点,但你现在已经有了一个主意。问题是,这种格式更难以操作(我有字母键或ID)。那么是否有任何字典的等价物?这是很简单的做这样的事情:

Object o = dictionary["1"]; 

所以,这是事先感谢。

+0

http://stackoverflow.com/questions/368280/javascript-hashmap-equivalent – Habib 2014-11-24 15:18:47

+0

如果您可以假定键是唯一的,只需创建一个对象。如果你不能,你需要构造两个数组 – 2014-11-24 15:20:36

+0

如果你的查找键是唯一的字符串(或者很容易转换为唯一的字符串),那么Javascript对象就可以很好地用于存储和查找与键。 – jfriend00 2014-11-24 15:21:11

回答

9

你有两种选择真的,虽然两者本质上做同样的事情,它可能是值得一读多一点here,其中谈到了关联数组(字典),如果你想定制的解决方案:

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

或者:

var dict = []; 

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

downvote的任何原因? – ediblecode 2014-11-25 09:37:52

+0

第二个为我工作!谢谢。 – 2016-08-29 22:56:58

4

是的,它叫做object。对象的键和值就像C#字典一样。键总是字符串。

在你的情况下,对象应该是这样的:

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

默认ASP.net串行产生难看的JSON。更好的选择是Json.NET

1

我的实施例:

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

我知道这个问题有点老,但是在ES2015中有一个叫做map的新数据结构,它与您在C#中使用的字典非常相似。所以,现在你不需要伪造一个对象或者一个数组。

MDN覆盖它很好。 ES2015 Map