是否可以在JavaScript Hashmap上执行推送和弹出操作



我有一个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"}

最新更新