GREP не обнаруживает добавленные элементы в массиве - PullRequest
1 голос
/ 02 марта 2020

У меня есть массив, изначально загруженный из бэкэнда с 100 элементами.

console.log(array) показывает 100 элементов.

Затем я получаю 1 новый элемент через ajax и добавляю его в массив с array.push(new_element);

console.log(array) показывает 101 элемент.

Если я console.log(array[array.length-1]), я получаю добавленный элемент.

Пока все хорошо, и данные верны , Это захват из добавленного элемента.

enter image description here


Затем я хочу показать подмножество выбранных элементов в списке.

sub_array = jQuery.grep(array, function(n) { return ( n.selected === 'True' });

Добавленный элемент 101 "выбран", подтвержден, но я не попадаю в sub_array.


Я проверил все логи c и все в порядке. Не могу понять, почему я не получаю элемент 101.

Похоже, команда grep получает данные массива из исходной версии, а не из обновленной.

Как, если это идет на более глубокий уровень памяти или что-то в этом роде. Это возможно?

Какой-то код

// Part 1 - The original data comes from Django backend

$(document).ready(function(){
    window.array = {{ course_list|safe }};
};


// Part 2 - Adding extra value

$.ajax({
    url:'/myurl',
    contentType : "application/json",
    dataType: 'json',

    success:function(data){

        console.log(array);
        // Here I get the correct number of 100 elements

        new_course = JSON.parse(data.extra_course);
        array.push(new_course);

        console.log(array);
        // Here I get the correct number of 101 elements
    },

    error:function(data){
    },
});

// Part 3 - 

function create_agenda() {
    console.log(array[array.length-1]);
    // Here I get the added element correctly

    sub_array = jQuery.grep(array, function(n) { return ( n.selected === 'True') });
    // Here I don't get the element. Even filtering by other fields
};

пример элемента sub_array

enter image description here

Любая подсказка приветствуется !! Спасибо.

1 Ответ

1 голос
/ 02 марта 2020

Внутри ответа ajax data.extra_course представляет собой массив, а не объект.
Вам нужно будет получить первый элемент extra_course и pu sh в array следующим образом:

$.ajax({
  url: '/myurl',
  contentType: "application/json",
  dataType: 'json',

  success: function (data) {

    console.log(array);
    // Here I get the correct number of 100 elements

    new_course = JSON.parse(data.extra_course);  // THIS RETURNS AN ARRAY

    array.push(new_course[0]);  // < ------------- USE THE FIRST OBJECT HERE

    console.log(array);
    // Here I get the correct number of 101 elements
  },

  error: function (data) {
  },
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...