Javascript的:使用整数作为关联数组中的键?

当我创build一个新的JavaScript数组,并使用一个整数作为关键时,该数组中的每个元素的整数被创build为undefined。 例如:

var test = new Array(); test[2300] = 'Some string'; console.log(test); 

将输出2298个未定义的和一个“一些string”。

我应该如何得到JavaScript使用2300作为一个string,而不是一个整数,或者我应该如何保持从实例2299空指数?

像人们所说的那样使用一个物体。 但是,请注意,您不能有整数键。 JavaScript会将整数转换为string 。 以下产出20,未定义:

 var test = {} test[2300] = 20; console.log(test["2300"]); 

你可以使用一个对象:

 var test = {} test[2300] = 'Some string'; 

正如人们所说,JavaScript会将一串数字转换为整数,所以不可能直接在关联数组上使用,但是对象将以类似的方式为您工作。

你可以创build你的对象:

 var object = {}; 

并添加值作为数组作品:

 object[1] = value; object[2] = value; 

这会给你:

 { '1':value, '2':value } 

之后,你可以像访问其他语言的数组一样获得密钥:

 for(key in object) { value = object[key] ; } 

我希望这是有用的! 我已经testing和工作。

如果用例将数据存储在集合中,则ES6提供Maptypes。

初始化只会更重。

这里是一个例子:

 const map = new Map(); map.set(1, "One"); map.set(2, "Two"); map.set(3, "Three"); console.log("=== With Map ==="); for (const [key, value] of map) { console.log(`${key}: ${value} (${typeof(key)})`); } console.log("=== With Object ==="); const fakeMap = { 1: "One", 2: "Two", 3: "Three" }; for (const key in fakeMap) { console.log(`${key}: ${fakeMap[key]} (${typeof(key)})`); } 

结果:

 === With Map === 1: One (number) 2: Two (number) 3: Three (number) === With Object === 1: One (string) 2: Two (string) 3: Three (string) 

尝试使用一个对象,而不是一个数组:

 var test = new Object(); test[2300] = 'Some string'; 

使用一个对象而不是一个数组。 JavaScript中的数组不是关联数组。 它们是具有与名称看起来像整数的任何属性相关的魔法的对象。 如果不将它们用作传统的类似数组的结构,那么这种魔法就不是你想要的。

 var test = {}; test[2300] = 'some string'; console.log(test); 

当属性名称为整数时,获取关联数组属性的值:

从属性名称为整数的关联数组开始:

 var categories = [ {"1":"Category 1"}, {"2":"Category 2"}, {"3":"Category 3"}, {"4":"Category 4"} ]; 

将项目推送到数组:

 categories.push({"2300": "Category 2300"}); categories.push({"2301": "Category 2301"}); 

循环访问数组,并使用属性值进行操作。

 for (var i = 0; i < categories.length; i++) { for (var categoryid in categories[i]) { var category = categories[i][categoryid]; // log progress to the console console.log(categoryid + " : " + category); // ... do something } } 

控制台输出应该如下所示:

 1 : Category 1 2 : Category 2 3 : Category 3 4 : Category 4 2300 : Category 2300 2301 : Category 2301 

正如你所看到的,你可以绕过关联数组的限制,并有一个属性名称是一个整数。

注意:在我的例子中的关联数组是如果你序列化一个Dictionary <string,string> []对象,你会有的json。

有时我使用我的密钥的前缀。 例如:

 var pre = 'foo', key = pre + 1234 obj = {}; obj[ key ] = val; 

现在你没有问题访问它们。

使用一个对象 – 以一个整数作为键 – 而不是一个数组。