Помогите с логикой (Json)



  • После того как сайт мне отдаёт список юзеров в формате Json, я получаю от туда список нужных мне исключая не подходящие страны действием "Получить все значения" модуля Json, получается просто огромная строчка вида

    $.html[?(@.country_name != "India" && @.country_name != "Philippines" && @.country_name != "Indonesia" && @.country_name != "Bangladesh" && @.country_name != "Pakistan" && @.country_name != "Serbia" && @.country_name != "South Africa" && @.country_name != "Algeria" && @.country_name != "Sri Lanka")].user_id
    

    Такое действие очень сильно нагружает бас и он подвисает если я запускаю больше 100 потоков при этом сам проц вроде работает на 40-50% хотя если измерять время выполнения действий то это действие тоже будет самым затратным для цп, а таких в скрипте 4 штуки.

    По логике я понимаю что это вроде как цикл перебора по этому он так много подвешивает ресурсов, но каким образом можно это же действие упростить. Может если через действие "выполнить код" и там добавить задержки между каждым действием внутри самого цикла перебора



  • $.html[?(["India", "Philippines"].indexOf(@.country_name) < 0)].user_id
    


  • @Oyasumi-Punpun
    Именно в таком ввиде почему-то не работает возвращает пустую строчку, а моё выражение выше возвращает список. Изначальный формат такой

    {"html":[{"user_id":"201259371","sex":"male","nickname":"GoldnShFan","country_code":"ch","country_name":"Switzerland","state":"","age":"51","vip":"1"},{"user_id":"2344793","sex":"female","nickname":"Sponsored","country_code":"us","country_name":"United States","state":"","age":"25","vip":"0"},{"user_id":"201150957","sex":"female","nickname":"patriciazm","country_code":"us","country_name":"United States","state":"","age":"19","vip":"0"},{"user_id":"201151326","sex":"female","nickname":"nancypv","country_code":"us","country_name":"United States","state":"","age":"24","vip":"0"}
    

    по моему запросу возвращает 201259371, 2344793, 201150957 ну и т.д
    по вашему почему то просто пустая переменная



  • @Oyasumi-Punpun
    Если вот так сделать

    $.html[?(["India"].indexOf(@.country_name) < 0)].user_id
    

    То возвращает нормально, если через запятую начать прописывать еще условия то выдаёт пустую переменную



  • @defol вам просто нужно перечислить в массиве все страны, которые нужно игнорировать. У меня все работало корректно при проверке.



  • @Oyasumi-Punpun
    Я может как то не так перечисляю странны и не тот массив создаю. Но вот посмотрите видео. Первый вариант я просто создаю переменную с одной странной всё нормально, во втором делаю список и всё уже 0. Как будто он ищет чтобы там было совпадение по всем странам сразу в одном пункте. Пробовал ставить вместо string - expression Но там вообще ошибка сразу красная. Пример



  • @defol ночью проверял в BAS. Есть баг в самом движке модуля, не совсем корректно обрабатывает массивы внутри фильтров. Буду править позже. Пока, как временное решение, могу предложить вам два плюс-минус адекватных варианта.

    1. Использовать не массив, а строку с разделителем:
    $.html[?("India:Philippines:Switzerland:Russia".split(":").indexOf(@.country_name) < 0)].user_id
    
    1. Отфильтровать все с помощью Выполнить код:
    var excluded = ["India", "Russia", "Philippines"];
    [[RESULT]] = JSON.parse([[SOURCE]]).html.filter(function (val) {
      return excluded.indexOf(val['country_name']) < 0;
    }).map(function (val) {
      return val['user_id'];
    });
    

Log in to reply