这是一种潜在的本地方式,可以保留名称索引/键,但如果您不使用真正的数组,则需要跟踪添加顺序。
trimToLast
丢弃顶部项目并调整其余项目的索引。
它a
用作键并用相同的值替换任何现有的项目。随后的添加出现在对象的末尾。
function Q() {
this.length = 0;
this.items = {};
};
Q.prototype.add = function(a, b) {
this.items[a] = {index: typeof this.items[a] === "undefined" ? this.length++ : this.items[a].index, a: a, b: b};
return this;
}
Q.prototype.trimToLast = function(keepLast) {
this.length -= keepLast;
for (var i in this.items) {
if (this.items[i].index < this.length) {
delete this.items[i];
} else {
this.items[i].index -= this.length;
}
}
this.length = keepLast;
}
var q = new Q();
q.add("t1", "t1").add("t2", "t2");
q.add("t3", "t3");
q.add("t4", "t4");
q.trimToLast(2);
q.add("t5", "t5");
for (var i in q.items)
console.log(i, ": #" + q.items[i].index + " of " + q.length, q.items[i]);
为了
t3 : #0 of 3 Object {index: 0, a: "t3", b: "t3"}
t4 : #1 of 3 Object {index: 1, a: "t4", b: "t4"}
t5 : #2 of 3 Object {index: 2, a: "t5", b: "t5"}