固定数组,当数组达到极限时,从最后删除元素-Javascript

时间:2018-11-06 19:26:17

标签: javascript

下午好!我正在寻找创建长度为5的固定数组,我想在其中存储最近查看的ID。当达到极限时,从头删除元素。

例如:

array = ['5', '4', '3', '2', '1'] // Array of 5 with ID's

当我添加一个ID时,数组要像这样:

array = ['6', '5', '4', '3', '2'];

继续前进。

非常感谢您抽出宝贵的时间,我尊重您的帮助。

6 个答案:

答案 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个元素。这样做的好处是,它仍然像具有lengthmap以及所有其他内容的数组一样。

进行此设置是为了在您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))