Как поддерживать список строк максимальной длины, удалять первую при поступлении новой строки

#javascript #angular #typescript #list

#javascript #angular #typescript #Список

Вопрос:

Я хотел бы поддерживать список строк с максимальной длиной.

Например, если я хочу поддерживать список с максимальной длиной 3. Я хочу нажать на список, если длина <3, и если длина достигает 3, когда я нажимаю, я хочу удалить первую запись.

 const list = ["A", "B", "C"]
list.push("D")
// Logic

// I want to see ["B","C","D"]
console.log(list)
  

Есть идеи для достижения этого?

Комментарии:

1. Использование just push невозможно, вы должны создать функцию, которая выполняет shift и push последовательно. В любом случае, это не о TypeScript

Ответ №1:

shift удалит элемент с начала, а затем использует push для добавления элемента.

 let list = ["A", "B", "C"]
list.length < 3 ? list.push("D"): modifyArr(list);

function modifyArr(list){
 list.shift();
 list.push('D');
}
console.log(list); 
  

Ответ №2:

Вы можете использовать класс, чтобы задать вам правило максимальной длины:

 class MaxLengthArray {

    private _array: string[];

    get array() {
        return this._array;
    }

    constructor() {
        this._array = [];
    }

    public insert(newValue: string) {
        if (this.array.length >= 3) {
            this.array.push(newValue);
            this.array.shift();
        } else {
            this.array.push(newValue);
        }
    }

}
  

https://www.typescriptlang.org/play ?#code/MYGwhgzhAECyYA8AyBTAdgcwC4AsCCATgWAJ7QDeAUJdLdAA4ECWAbmFitAPphGkBc0CFmaYA2gF0A3NTrQMKLNF7ESACgCUFGnLoFFAVwJpouJhAB0PPiRlyAvrLrAA9mmEEDwLC4KbtunRmltaq0AC80JJ2dI46tPQGAEYgTMDQTO4oBFhqaCgA7gBqYCAGKIIemRhaVIG0TABm0GrBFiqkFiDo2DjQAHyRAMy18fW0bR0kFokQOHmFJWUoGjHjEzjm7TYWc025q2MO0CggEJx16xtbUzMGcwvFpeWH444O1HGu7koIEdD5ApwRCoTC4QiqTQySgICyZc45NQAcjwSMOsPh2VySIAQmiZBisoikQBhfEwuFE7EAEXJlG EBc3S6LgwalhUw0QA

Ответ №3:

Что нам нужно, так это очередь (немного измененная), структура данных first in first out (FIFO).

 class Queue<T> {
  _store: T[] = [];
  push(val: T) {
    if (this._store.length < 3) {
      this._store.push(val);
    } else {
      this._store.shift();
      this._store.push(val);
    }
  }

  GetQ() {
    return this._store;
  }

}
  

ПРИМЕЧАНИЕ: — Приведенный выше класс инкапсулирует очередь. Возможно, вам придется настроить его в соответствии с вашими потребностями.