Добавлять только последний элемент массива в существующий массив - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть существующий массив, который при прокрутке я пытаюсь добавить больше элементов.

Я использую rss2json для преобразования RSS-канала в json.

 ngOnInit() {
    this.getRssFeed();  // returns 4 items
}

Вот как я добавляю больше элементов:

this.count++;
this.podcastService.getRssFeed(this.rssUrl, this.count)
    .then(data => {
        if (data) {
            for (const episodes of data.items) {
                this.episodes.push(episodes);  // returns 5 items
                // const episode = this.episodes[episodes.length - 1]
            }
            event.target.complete();
            console.log(data);
            ...

Счет правильно увеличивается.Но каждый раз, когда вызывается getRssFeed, возвращается весь массив.Каждый раз с правильной длиной.Я не уверен, как pop все элементы массива, которые возвращаются, за исключением последнего.

Я также пробовал что-то подобное, чтобы попробовать и push() только последний элемент массива вернулся.Все еще не повезло.

const episode = this.episodes[episodes.length - 1] 

Например, если при начальной загрузке я получаю:

[foo, bar]

, когда я прокручиваю, я возвращаюсь:

[foo, bar, baz]

Я только хочу добавить baz к уже существующему массиву.

Спасибо за любые предложения!

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Одним из решений, которое вы можете попробовать, является изменение следующей части кода:

if (data)
{
    for (const episodes of data.items)
    {
        this.episodes.push(episodes);  // returns 5 items
        // const episode = this.episodes[episodes.length - 1]
    }
...
}

На это:

if (data)
{
    let lastEpisode = data.items.pop();
    this.episodes.push(lastEpisode);
...
}

Здесь pop() используется для удаления последнейэлемент из массива data.items и возвращает этот элемент, мы сохраняем его в переменной lastEpisode и, наконец, помещаем его в массив episodes.Другое решение, которое не изменит массив data.items, может быть:

if (data)
{
    let lastEpisode = data.items[data.items.length - 1];
    this.episodes.push(lastEpisode);
...
}
0 голосов
/ 05 февраля 2019

Насколько я понимаю, вы хотите добавить в список episodes только самые последние элементы, возвращенные из службы getRssFeed.Вы можете использовать синтаксис разброса массива для обновления списка эпизодов при каждом вызове службы getRssFeed.

Вы можете обновить функцию, чтобы она выглядела следующим образом:

this.count++; 
this.podcastService.getRssFeed(this.rssUrl, this.count)
    .then(data => {
        if (data) {
            this.episodes = [
               // This keeps the previous episodes
               ...this.episodes,
               // This adds the last item returned to the array
               data.items[data.items.length -1],
            ]
        }
        event.target.complete();
        console.log(data);
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...