我有一个javascript hashmap,so:
var hash = new Object();
hash["1000001"] = {value="red"};
hash["1000002"] = {value="green"};
hash["1000003"] = {value="blue"};
我知道hash.pop()
无法正常工作。但是,有没有办法找出最后一个添加了哪个元素,以便我可以删除它?
也许我应该将我的问题构成这样的问题:" 是否有一种方法可以找出将元素添加到哈希中的顺序?哈希)"
nope。您必须自己跟踪这一点。类似:
function setOrdered(hash, key, val) {
if (!(key in hash)) {
hash.order = hash.order || [];
hash.order.push(key);
}
hash[key] = val;
}
function popOrdered(hash) {
if (!hash.order || hash.order.length === 0) {
throw new Error("Empty hash");
}
var lastKey = hash.order.pop();
var result = hash[lastKey];
delete hash[lastKey];
return result;
}
用法:
> var hash = {};
> setOrdered(hash, 'a', 10);
> setOrdered(hash, 'b', 20);
> setOrdered(hash, 'c', 30);
> popOrdered(hash);
30
> hash
{'a': 10, 'b': 20}
我只会存储一个跟踪索引的数组,因为它将保持订购,然后给项目一个推动和pop功能:
var hash = new Object();
hash.indexes=[];
hash.push = function(index, item) {
hash[index] = item;
hash.indexes.push(index);
}
hash.pop = function() {
item = hash.indexes.pop();
ret_item = hash[item];
delete hash[item];
return ret_item;
}
hash.push("1000001", {value:"red"});
hash.push("1000002", {value:"green"});
hash.push("1000003", {value:"blue"});
hash.pop()
//{value: "blue"}