我做了一些研究,似乎我们可以使用Jquery.map()
或创建一个javascript对象:var Map = {};
但是它们似乎都没有提供丰富的功能来轻松操作地图。
MDN似乎有Map
类型,但只有IE11支持
在javascript中是否有类似于Java中提供地图功能的地图类型,例如,添加元素,通过地图迭代,类似的东西?谢谢!
答案 0 :(得分:3)
您可以根据自己的需要使用常用对象。
var thing = {property:"value", otherProperty:"othervalue"};
如果您通过JavaScript api以及可以添加,删除和访问的语言(它们看起来像地图,但没有附加所有方法,那么您可以在Java地图上找到它们)它们非常灵活
除此之外,他们可以提供很多帮助,如果你不是在寻找hashmap<> s或treemap<> s
这个解决方案的问题在于方法没有像在类中那样附加,但它们是语言的一部分(对象的访问属性),这可能会让你感到困惑。
一些可能有用的链接(它们是一些基本的东西,但如果它可以帮助某人......):
How to create a simple map using JavaScript/JQuery
JavaScript property access: dot notation vs. brackets?
http://www.w3schools.com/js/js_properties.asp
http://www.sitepoint.com/back-to-basics-javascript-object-syntax/
有趣的引用(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map):
比较对象和地图
对象类似于Maps,它们都允许您将键设置为值,检索这些值,删除键以及检测某些键是否存储在键中。因此,对象在历史上被用作地图;但是,对象和地图之间存在重要差异,这使得使用地图变得更好。
对象有一个原型,因此地图中有默认键。但是,可以使用map = Object.create(null)绕过此值。 Object的键是字符串,它们可以是Map的任何值。 您必须手动跟踪对象的大小,才能轻松获得Map的大小。 当密钥未知时直到运行时,并且当所有密钥都是相同类型且所有值都是相同类型时,请使用对象上的映射。
示例(How to create a simple map using JavaScript/JQuery):
var map = new Object(); // or var map = {};
map[myKey1] = myObj1;
map[myKey2] = myObj2;
function get(k) {
return map[k];
}
PS如果你想使用Map(“这是一种实验技术”)。对象无处不在,并且适用于所有浏览器。
答案 1 :(得分:1)
你可以创建自己的。
这是一个起点:
var Map = (function() {
return function() {
var hashMap = {};
var hashOrder = [];
return {
get: function(key) {
if (hashMap[key]) {
return hashMap[key];
}
},
has: function(key) {
return hashOrder.indexOf(key) > -1;
},
set: function(key, value) {
if (this.has(key)) {
throw new Error('Cannot set a key that already exists!');
}
hashOrder.push(key);
return hashMap[key] = value;
},
remove: function(key) {
var index = hashOrder.indexOf(key);
if (index > -1) {
hashOrder.splice(index, 1);
}
return delete hashMap[key];
},
values: function() {
var arr = [];
this.each(function(value) {
arr.push(value);
});
return arr;
},
keys: function() {
return hashOrder;
},
each: function(fn) {
var key;
var i = 0;
var length = hashOrder.length;
for (i; i < length; ++i) {
key = hashOrder[i];
fn(hashMap[key], key);
}
},
toJSON: function() {
var jsonString = JSON.stringify(hashMap);
return JSON.parse(jsonString);
},
toString: function() {
return JSON.stringify(hashMap);
}
//..etc
};
};
})();
// then you can do:
var map = new Map();
map.set('lemons', 12);
map.set('peanuts', 42);
console.log(map.values(), map.keys());
map.each(function(value, key) {
console.log('EACH', value, key);
});
console.log(map.toJSON(), map + '');
&#13;