javascript – 如何动态创建字典和添加键值对?
作者:互联网
从帖子:
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";
但这不起作用.
解决方法:
var dict = []; // create an empty array
dict.push({
key: "keyName",
value: "the value"
});
// repeat this last part as needed to add more key/value pairs
基本上,您正在创建一个具有2个属性(称为键和值)的对象文字,并将其插入(使用push())到数组中.
编辑:所以差不多5年后,这个答案正在下降,因为它没有创建一个“正常”的JS对象文字(又名地图,又名哈希,又名字典).
然而,它创建了OP要求的结构(并且在链接到的另一个问题中说明了),这是一个对象文字数组,每个都有键和值属性.不要问我为什么需要这种结构,但这是被要求的结构.
但是,但是,如果你想要的是一个简单的JS对象 – 而不是OP所要求的结构 – 请参阅tcll’s answer,但是如果你只有简单的密钥是有效的JS名称,那么括号表示法有点麻烦.你可以这样做:
// object literal with properties
var dict = {
key1: "value1",
key2: "value2"
// etc.
};
或者在创建对象后使用常规点符号设置属性:
// empty object literal with properties added afterward
var dict = {};
dict.key1 = "value1";
dict.key2 = "value2";
// etc.
如果您有包含空格的键,特殊字符或类似的东西,您确实需要括号表示法.例如:
var dict = {};
// this obviously won't work
dict.some invalid key (for multiple reasons) = "value1";
// but this will
dict["some invalid key (for multiple reasons)"] = "value1";
如果您的键是动态的,您还需要括号表示法:
dict[firstName + " " + lastName] = "some value";
请注意,键(属性名称)始终是字符串,非字符串值在用作键时将强制转换为字符串.例如. Date对象转换为其字符串表示形式:
dict[new Date] = "today's value";
console.log(dict);
// => {
// "Sat Nov 04 2016 16:15:31 GMT-0700 (PDT)": "today's value"
// }
但请注意,这并不一定“只是工作”,因为许多对象将具有类似“[object Object]”的字符串表示形式,这不会产生非唯一键.所以要警惕:
var objA = { a: 23 },
objB = { b: 42 };
dict[objA] = "value for objA";
dict[objB] = "value for objB";
console.log(dict);
// => { "[object Object]": "value for objB" }
尽管objA和objB是完全不同且独特的元素,但它们都具有相同的基本字符串表示:“[object Object]”.
Date不是这样的原因是Date原型有一个自定义的toString方法,它覆盖了默认的字符串表示.你也可以这样做:
// a simple constructor with a toString prototypal method
function Foo() {
this.myRandomNumber = Math.random() * 1000 | 0;
}
Foo.prototype.toString = function () {
return "Foo instance #" + this.myRandomNumber;
};
dict[new Foo] = "some value";
console.log(dict);
// => {
// "Foo instance #712": "some value"
// }
(注意,由于上面使用了一个随机数,名称冲突仍然可以很容易地发生.它只是为了说明toString的实现.)
因此,当尝试使用对象作为键时,JS将使用对象自己的toString实现(如果有),或使用默认字符串表示.
标签:javascript,dictionary,key-value 来源: https://codeday.me/bug/20190918/1810464.html