Answers:
就像人们所说的那样使用对象。但是,请注意,不能有整数键。JavaScript会将整数转换为字符串。以下输出20(未定义):
var test = {}
test[2300] = 20;
console.log(test["2300"]);
0.25
并.25
解析为相同的字符串"0.25"
。所以,如果你正在使用小数键,你可以检索一个数值设置键的财产0.25
使用0.25
,.25
,"0.25"
但不是".25"
。
您可以只使用一个对象:
var test = {}
test[2300] = 'Some string';
如果用例将数据存储在集合中,则ECMAScript 6提供Map
类型。
初始化只会更重。
这是一个例子:
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 = {};
使用数字作为新属性的键时,数字将变成字符串:
test[2300] = 'Some string';
console.log(test['2300']);
// Output: 'Some string'
当使用相同的数字访问属性的值时,该数字将再次变为字符串:
console.log(test[2300]);
// Output: 'Some string'
但是,当从对象获取键时,它们将不会被转换为数字:
for (var key in test) {
console.log(typeof key);
}
// Output: 'string'
ECMAScript 6允许使用Map对象(文档,与Object的比较)。如果您的代码是要在本地解释的,或者ECMAScript 6兼容性表看起来足以满足您的要求,请考虑使用Map:
var test = new Map();
test.set(2300, 'Some string');
console.log(test.get(2300));
// Output: 'Some string'
不管类型是好还是坏,都不会执行类型转换:
console.log(test.get('2300'));
// Output: undefined
test.set('2300', 'Very different string');
console.log(test.get(2300));
// Output: '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内容。