wal*_*ros 13 javascript arrays angularjs
我想在javascript中缓存一些数据,但缓存应限制为10个元素.
我可以将对象放在javascript数组中,但是将数组限制为10个元素的最佳方法是什么?
例:
function getData(dataId) { return new NextDataObject(dataId); }
var array = new Array();
array.push(getData(0));
array.push(getData(1));
(...)
array.push(getData(10)); // this should result in dropping "oldest" data, so getData(0) should be removed from the array, so that in array there are only 10 objects at maximum
Run Code Online (Sandbox Code Playgroud)
应该手动编写这样的机制(例如使用splice()吗?)还是有更好的方法在javascript中实现这种"缓存"结构?
顺便说一句:在这种特殊情况下,我正在使用棱角分明.
Mic*_*ael 17
覆盖push缓存数组的功能.
var array = new Array()
array.push = function (){
if (this.length >= 10) {
this.shift();
}
return Array.prototype.push.apply(this,arguments);
}
Run Code Online (Sandbox Code Playgroud)
为了使这更可重用,我创建了一个返回此类数组的新实例的方法(基于上面的代码).
function getArrayWithLimitedLength(length) {
var array = new Array();
array.push = function () {
if (this.length >= length) {
this.shift();
}
return Array.prototype.push.apply(this,arguments);
}
return array;
}
var array = getArrayWithLimitedLength(10);
Run Code Online (Sandbox Code Playgroud)
这个对象怎么样?
function Cache(maxLength) {
this.values = [];
this.store = function(data) {
if(this.values.length >= maxLength) {
this.getLast();
}
return this.values.push(data);
}
this.getLast = function() {
return this.values.splice(0,1)[0];
}
}
cache = new Cache(3);
// => Cache {values: Array[0]}
cache.store(1)
// => 1
cache.store(2)
// =>2
cache.store(3)
// => 3
cache.store(4)
// =>3
cache.values
// => [2, 3, 4]
cache.getLast()
// => 2
cache.values
[3, 4]
Run Code Online (Sandbox Code Playgroud)
要从数组中删除第一个元素shift:
if (arr.length > 10) {
arr.shift(); // removes the first element from an array
}
Run Code Online (Sandbox Code Playgroud)