#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);
}
}
}
Ответ №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;
}
}
ПРИМЕЧАНИЕ: — Приведенный выше класс инкапсулирует очередь. Возможно, вам придется настроить его в соответствии с вашими потребностями.