下午好!我正在寻找创建长度为5的固定数组,我想在其中存储最近查看的ID。当达到极限时,从头删除元素。
例如:
array = ['5', '4', '3', '2', '1'] // Array of 5 with ID's
当我添加一个ID时,数组要像这样:
array = ['6', '5', '4', '3', '2'];
继续前进。
非常感谢您抽出宝贵的时间,我尊重您的帮助。
答案 0 :(得分:2)
您可以取消移动数组,并根据所需长度和旧长度中的最小值调整长度。
function unshift(array, value) {
array.unshift(value);
array.length = Math.min(array.length, 5);
return array;
}
var array = [],
i;
for (i = 0; i < 10; i++) console.log(unshift(array, i).join(' '));
答案 1 :(得分:1)
这里有一个带有id的函数,如果有5个以上的元素,则删除最后一个元素,然后将id添加到数组的开头。
function addId(id, array) {
if (array.length === 5) {
array.pop();
}
array = array.splice(0, 0, id);
return array;
}
答案 2 :(得分:1)
var array = ['5', '4', '3', '2', '1'];
console.log(array);
queue('6');
console.log(array);
function queue(number){
array.pop(); //removes last element from array
array.splice(0, 0, number);//puts new number in first spot
}
这应该可以解决问题。任何时候需要将元素添加到数组中时,只需调用该函数即可。
答案 3 :(得分:1)
如果数组的最后一个元素的长度等于您希望数组的最大长度,则可以修改数组的push
方法,以删除数组的最后一个元素,Array.prototype.pop
。
var array = ['5', '4', '3', '2', '1'];
array.maxlength = 5;
array.push = function(elem){
if(this.length==this.maxlength){
this.pop();
}
return [].unshift.call(this, elem);
}
array.push('6');
console.log(array);
答案 4 :(得分:0)
您可以创建一个小类来为您管理ID
class Ids {
constructor() {
this._store = [];
}
add(id) {
if (this.store.length > 4) this._store.shift();
this._store.push(id);
}
get store() {
return this._store;
}
}
const id = new Ids();
id.add(1);
id.add(2);
id.add(3);
id.add(4);
id.add(5);
id.add(6);
id.add(7);
id.add(8);
id.add(9);
console.log(id.store);
答案 5 :(得分:0)
您可以使用proxies执行此操作,甚至更多。例如,这是一个简单的代理,仅将一个数组保留为5个元素。这样做的好处是,它仍然像具有length
和map
以及所有其他内容的数组一样。
进行此设置是为了在您unshift
时,多余的元素会掉到最后。当然,您可以使用push
进行相反的操作。只要索引小于5,您也可以按索引手动分配。
var limitedArrayProxy = {
set: function(target, property, value, receiver) {
if (!isNaN(property)){
if(parseInt(property) < 5){
target[property] = value;
}
}
return true;
}
};
var limitArray = new Proxy( [], limitedArrayProxy );
// push on a few elements
limitArray.push(1, 2, 3)
console.log(limitArray)
// unshift a few more
limitArray.unshift(5, 4)
console.log(limitArray)
// now that length is 5 unshift will add to front
// and the last element will fall off
limitArray.unshift(10)
console.log(limitArray)
// manually change index 2
limitArray[2] = "manually changed"
console.log(limitArray)
// it won't let you push more than five
limitArray.push(20)
console.log(limitArray)
// can't add an index of 5 or greater
limitArray[5] = "overflow"
console.log("still 5 element:", limitArray)
// it still acts like an array
// with length and methods like map
console.log("length", limitArray.length)
console.log("map squares", limitArray.map(i => i**2))