Javascript映射变量

Javascript map variable

本文关键字:变量 映射 Javascript      更新时间:2023-10-16

我希望在JavaScript中实现c++地图变量类型,但在互联网上看不到任何东西。当我使用SFML时,我创建了一个String类型的std::map和SFML::Texture,这样我就可以在map中存储纹理,并通过使用键获得纹理值,我该如何将其实现到JavaScript中?

我想这样做的原因是我想在HTML5游戏开始时加载所有图像资源,然后我可以调用图像映射并使用键获取图像引用。

JavaScript的标准方式就是一个对象:

var map = {};
map["any key you like"] = any_value_you_like;
// Also:
map.any_name_you_like_that_fits_identifer_name_rules = any_value_you_like;

键总是字符串(目前,ES6将添加符号/名称键),值是任何JavaScript值。当你使用点表示法(obj.foo)时,属性名是一个文字(并且受JavaScript的IdentifierName规则的约束);当您使用括号表示法和字符串(obj["foo"])时,属性名可以是任何东西(并且可以是任何表达式的结果,例如变量查找)。

示例:Live Copy

var map = {};
map["a"] = "alpha";
map["b"] = "beta";
map["c"] = "gamma";
["a", "b", "c"].forEach(function(key) {
  display("map['" + key + "'] = " + map[key]);
});
输出:

map['a'] = alphaMap ['b'] = betaMap ['c'] = gamma

dandavis提出了一个有趣的观点:当你通过{}创建一个对象时,它继承了Object.prototype的属性,但从ES5开始,你可以使用Object.create(null),这不是:

var map = Object.create(null);
map["any key you like"] = any_value_you_like;
// Also:
map.any_name_you_like_that_fits_identifer_name_rules = any_value_you_like;

这样,如果您碰巧有像toStringvalueOf这样的名称的键(它们在Object.prototype上)的可能性,那么当您在没有显式设置它们的对象上查找它们时,您将不会得到误报。

现在可以使用Map数据结构了。它是通过ES6引入JavaScript的,允许创建键值对的集合。与对象不同,映射对象可以同时保存对象和原语作为键和值。下面是示例:

const items = new Map();
// add items
items.set('  ', 'Dog');
items.set('  ', 'Eagle');
items.set('  ', 'Train');
items.set(45, 'Number');
items.set(true, 'Boolean');
// iterate over map
for (const [key, value] of items) {
    console.log(`${key}: ${value}`);
}
输出:

  : Dog
  : Eagle
  : Train
45: Number
true: Boolean

更多示例