@kikosko

Почему метод unshift работает не корректно?

Хочу добавлять пост в начало списка, но тогда айди после добавления второго элемента не считается, то есть, не добавляется + 1 к айди поста. Так же когда удаляю, удаляются сразу все элементы добавлены после первого. Когда добавляю через push, все работает отлично. Через unshift или splice, возникает эта проблема, помогите решить и понять почему происходит именно так

Метод:
addPost(title: string, url: string): void {

        const id: number = this.collection.length
            ? this.collection[this.collection.length - 1].id + 1
            : 1;
        const post: Picture = {
            title,
            url,
            id
        };
        this.collection.unshift(post);
    }
  • Вопрос задан
  • 221 просмотр
Решения вопроса 2
0xD34F
@0xD34F
Вы добавляете элементы в начало массива, а новый id вычисляете на основе последнего элемента. Очевидно же - сколько бы элементов вы ни добавили таким образом, id последнего не изменится, а значит и новые id будут одинаковыми. На вашем месте, вместо того, чтобы плясать от какого-то конкретного элемента, я бы искал максимальный id:

const id = Math.max(0, ...this.collection.map(n => n.id)) + 1;
Ответ написан
Комментировать
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
Вы вставляете в начало массива, а id для вычисления берете у последнего элемента.
Гораздо правильнее, брать максимум от всех id и уже его увеличивать на еденицу:
const id: number = Math.max(0, ...this.collection.map(({id}) => id)) + 1;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы