Использование array.push не дает правильно структурированный массив (нельзя использовать массив с функцией фильтра) - PullRequest
0 голосов
/ 18 февраля 2019

Я использую array.push для отправки содержимого ответа JSON в массив.Но при этом он добавляет странное форматирование в мой массив.В результате я не могу использовать функцию фильтра для фильтрации массива.Я жестко запрограммировал некоторые json в другом тестовом примере и успешно использовал функцию фильтра (см. Изображения ниже сравнений console.logs)

Ответ JSON выглядит следующим образом: </p> <pre><code>{ "posts": [ { "id": 1702574719019, "title": "Title 1", "published_at": "2019-02-16T09:40:36-05:00", "created_at": "2019-02-16T09:40:37-05:00", "updated_at": "2019-02-16T09:40:38-05:00", "vendor": "DZR" }, { "id": 1702574719019, "title": "Title 2", "published_at": "2019-02-16T09:40:36-05:00", "created_at": "2019-02-16T09:40:37-05:00", "updated_at": "2019-02-16T09:40:38-05:00", "vendor": "DZR" } ] }

То, как я обрабатываю эти данные, выглядит следующим образом (отрывок из успешного обратного вызова ajax):

    var this.postList = [];
    var t = this;
      while (i < pages) {
        $.ajax({
          url: "" + i,
          dataType: 'json',
          type: 'get',
          success: function(data) {

            $.each( data.posts, function( i, value ) {
              t.postList.push( value );
            });

          },
          error: function(XMLHttpRequest) {
          }
        });
        i++;
      }

Этокак выглядит postList, когда я его утешаю.Объекты не находятся внутри массива [], как на изображении после этого. enter image description here

Вот как я предполагаю, что это должно выглядеть, не позволяя мнеправильно использовать array.filter (ничего не возвращает) enter image description here

Я считаю, что я использую array.push неправильно и неправильно добавляю объекты в массив и, следовательно, он выглядитстранно, когда я console.log это.Но я понятия не имею, как это исправить, любая информация будет оценена.

Ответы [ 4 ]

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

Попробуйте использовать приведенный ниже код.

this.postList = [];
var t = this;
success: function(data) {
  $.each( data.posts, function( i, value ) {
    t.postList.push( value );
  });
}

Здесь просто определите this.postList как массив, а затем используйте его для передачи значений.

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

Не используйте это в обратном вызове.

Вы можете сделать это просто

postList = data.posts;
0 голосов
/ 18 февраля 2019

Если вы используете

$.each( data.posts, function( i, value ) {
    postList.push( value );
});

без этого.Отлично работает

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

Ключевое слово this, которое вы используете, относится к области, в которой вы находитесь. Таким образом, this относится к обратному вызову, вызываемому на $.each.

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

postList.push(...)

вместо

this.postList.push(...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...