JavaScript 中的 C# 字典等效项
Posted
技术标签:
【中文标题】JavaScript 中的 C# 字典等效项【英文标题】:C# Dictionary equivalent in JavaScript 【发布时间】:2015-01-22 08:33:46 【问题描述】:javascript 中是否存在任何类型的 c# 字典。我在 angularjs 中有一个应用程序,它从 MVC Web Api 请求数据,一旦获得,它就会对其进行一些更改。所以数据是一个对象数组,它作为对象字典存储在 MVC Web Api 中,但我在通过网络传递它之前将其转换为列表。
如果我将 Dictionary 直接转换为 JSON,我会得到类似的结果:
array = [ Id:"1", Id:"1", Name:"Kevin Shields",
Id:"2", Id:"2", Name:"Natasha Romanoff"
];
嗯,这些对象有点复杂,但你现在有了一个想法。问题是这种格式更难操作(我有字母键或ID)。那么有没有相当于字典的东西?这样做很简单:
Object o = dictionary["1"];
就是这样,先谢谢了。
【问题讨论】:
***.com/questions/368280/… 如果您可以假设键是唯一的,只需创建一个对象。如果不能,则需要构造两个数组 如果您的查找键是唯一字符串(或很容易转换为唯一字符串),那么 Javascript 对象可以很好地存储和查找与键关联的键和数据。 【参考方案1】:是的,它被称为object。对象具有键和值,就像 C# 字典一样。键始终是字符串。
在您的情况下,对象将如下所示:
"1":
"Id": 1,
"Name":" Kevin Shields"
,
"2":
"Id": 2,
"Name": "Natasha Romanoff"
默认的 ASP.net 序列化程序会生成丑陋的 JSON。更好的选择是Json.NET。
【讨论】:
var dict = <your-code>
问题是dict.length === 0
,所以即使是基本的 c# 字典也不起作用。【参考方案2】:
您确实有两个选择,尽管两者本质上都做同样的事情,但如果您想定制解决方案,可能值得多读一点 here,其中谈到了关联数组(字典):
var dictionary = new Array();
dictionary['key'] = 'value'
或者:
var dict = [];
dict.push(
key: 'key',
value: 'value'
);
更新
从 ES2015 开始你可以使用Map():
const dict = new Map();
dict.set('propertyName', propertyValue);
【讨论】:
链接是 404。第一个示例问题:dictionary.length === 0
第二个示例问题:dict['key'] === undefined
。所以这些都不是一个基本的 C# 字典。
这是正确的答案,目前,如果将字典从 javascript 发送到控制器。 NewtonSoft 和 System.Text.Json 都不可信。 NewtonSoft 的序列化 json 在网络框架的反序列化中无法生存,并且 System.Text.Json 引发 System.NotSupportedException 因为它不执行 Dictionary我的例子:
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 ] ;
【讨论】:
【参考方案4】:我知道这个问题有点老了,但是在 ES2015 中有一个名为 map 的新数据结构,它更类似于您在 C# 中使用的字典。因此,现在您不必将其伪造为对象或数组。
MDN 很好地涵盖了它。 ES2015 Map
【讨论】:
支持 c# 基本字典方法(js:size === c#:count, js:set === c#:add 等)。以上是关于JavaScript 中的 C# 字典等效项的主要内容,如果未能解决你的问题,请参考以下文章