从帖子:
Sending a JSON array to be received as a Dictionary<string,string>
我正在尝试做同样的事情 . 唯一的问题是我不知道密钥和值是什么 . 所以我需要能够动态添加键和值对,我不知道该怎么做 .
有谁知道如何创建该对象并动态添加键值对?
我试过了:
var vars = [{key:"key", value:"value"}];
vars[0].key = "newkey";
vars[0].value = "newvalue";
但这不起作用 .
13 回答
它很简单:
要么
然后
既然你已经声明你想要一个字典对象(和 not an array ,就像我假设一些人理解的那样),我认为这就是你所追求的:
JavaScript的
Object
is 本身就像一本字典 . 无需重新发明轮子 .Fiddle
基本上,您正在创建一个具有2个属性(称为
key
和value
)的对象文字,并将其插入(使用push()
)到数组中 .Edit: 所以差不多5年之后,这个答案正在下降,因为它没有创建一个"normal" JS对象文字(又名 Map ,又名哈希,又名字典) .
然而,它创建了OP要求的结构(并且在链接到的另一个问题中说明了),这是一个对象文字数组,每个都有
key
和value
属性 . 唐't ask me why that structure was required, but it'是被要求的那个 .但是,但是,如果你想要一个简单的JS对象 - 而不是OP要求的结构 - 请参阅tcll's answer,尽管如果你只有简单的密钥是有效的JS名称,括号表示法有点麻烦 . 你可以这样做:
或者在创建对象后使用常规点符号设置属性:
如果您的键中包含空格,特殊字符或类似的东西,您确实需要括号表示法 . 例如:
如果您的键是动态的,您还需要括号表示法:
请注意,键(属性名称)始终是字符串,非字符串值在用作键时将被强制转换为字符串 . 例如 .
Date
对象转换为其字符串表示形式:但请注意,这不一定是"just work",因为许多对象将具有像
"[object Object]"
这样的字符串表示形式,这不会产生非唯一键 . 所以要警惕:尽管
objA
和objB
是完全不同且独特的元素,但它们都具有相同的基本字符串表示形式:"[object Object]"
.Date
的行为不是这样的原因是Date
原型有一个自定义的toString
方法,它覆盖了默认的字符串表示形式 . 你也可以这样做:(注意,由于上面使用了一个随机数,名称冲突仍然可以很容易地发生 . 它只是为了说明
toString
的实现 . )因此,当尝试使用对象作为键时,JS将使用对象自己的
toString
实现(如果有),或使用默认字符串表示 .像python一样工作:)
控制台输出:
我碰巧在这个问题上寻找类似的东西 . 它给了我足够的信息来运行测试以获得我想要的答案 . 因此,如果其他人想知道如何在JavaScript对象中动态添加或查找{key:'value'}对,则此测试应该告诉您可能需要知道的所有内容 .
产量
您可以将 Map 与Map一起使用,如下所示:
您可以创建一个类Dictionary,以便您可以轻松地与Dictionary列表进行交互:
我遇到了这个问题..但在for循环中 . 顶级解决方案不起作用(当使用变量(而不是字符串)作为push函数的参数时),其他解决方案没有考虑基于变量的键值 . 我很惊讶这种方法(这在php中很常见)起作用..
如何创建一个键值对的衬垫怎么样?
和
reduce
这样的迭代器函数可以动态地将数组转换为字典知道你最终想要的结果会有多大帮助,但我认为这就是你想要的:
var dict = {}
的改进是使用var dict = Object.create(null)
.这将创建一个空对象 not 具有
Object.prototype
作为它的原型 .