JSON фильтрация для нескольких ключей работает медленно - PullRequest
0 голосов
/ 08 марта 2020

Мой код работает, но кажется, что он работает исключительно медленно.

У меня есть массив значений для поиска, и у меня есть JSON, который я фильтрую.

var JSONPull;
var FilterJSON = [];
var TypeIDs = [34,35,36,37,38,39,40,11399,1230,17470,17471,1228,17463,17464,1224,17459,17460,18,17455,17456,1227,17867,17868,20,17452,17453,1226,17448,17449,21,17440,17441,1231,17444,17445,1229,17865,17866,1232,17436,17437,19,17466,17467,1225,17432,17433,1223,17428,17429,22,17425,17426,11396,17869,17870];

fetch('URL API')
    .then(res => res.json())
    .then((out) => {
        JSONPull = out;
        TypeIDs.forEach(function (index){
            FilterJSON = JSONPull.filter((element) => {
                console.log("index: "+index);
                console.log(element);
                console.log("type_id: "+ element.type_id);
                element.type_id === index;
            });
        })
    })

console.logs - это больше просто для просмотра кода во время тестирования, но определенно не должно вызывать эти проблемы с производительностью.

Не могли бы вы дать мне совет по оптимизации производительности?

Ответы [ 2 ]

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

При том, как вы это делаете сейчас, на каждый отдельный элемент данных добавляется l oop для количества идентификаторов, которые вы ищете. Я бы предположил, что у вас гораздо больше записей, чем вы ищете идентификаторов, так что вы должны немного реорганизовать это и удалить весь обратный вызов / закрытие в процессе. Опирайтесь на код, оптимизированный для браузера и затрудняет просмотр вашего кода. (Не то чтобы заботится компилятор ...)

И, console.log() может определенно вызвать проблемы с производительностью.

0 голосов
/ 08 марта 2020

Я понял, что у меня была другая проблема, когда API ограничивался 1000 объектами на вызов, поэтому мне пришлось перебирать type_id, чтобы добавить в качестве фильтра API, мой код приведен ниже и отлично работает. Спасибо всем за помощь.

var mergedJSON = [];
var TypeIDs = [34,35,36,37,38,39,40,11399,1230,17470,17471,1228,17463,17464,1224,17459,17460,18,17455,17456,1227,17867,17868,20,17452,17453,1226,17448,17449,21,17440,17441,1231,17444,17445,1229,17865,17866,1232,17436,17437,19,17466,17467,1225,17432,17433,1223,17428,17429,22,17425,17426,11396,17869,17870];

TypeIDs.forEach(function(index){

fetch(`https://<URL here>&order_type=all&type_id=${index}`)
    .then(res => res.json())
    .then((out) => {
        out.forEach(function (element){
            mergedJSON.push(element);
        })
    })
})

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

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