Ответы пользователя по тегу JavaScript
  • Почему путаются данные в цепочке ajax-запросов?

    @cppjunkie
    Если важно выводить в каком-то порядке, то просто сохраняйте результаты где-нибудь и когда все выполнится выводите их в каком надо порядке. Например, в объектике, где ключ - это индекс, а значение - это результат операции. А при текущем подходя порядок не гарантирован, как уже сказали.

    Если важно именно выполнять запросы по порядку, т.е. последовательно от 1 до N, то можно объединить их в цепочку из промисов. Вроде такого:

    var promise = $.Deferred().promise();
    
    $('ul.article-list > li').each(function(key, item) {
        promise = promise.then(function() {
            getSumComments($(item).children('a').attr('href'),$(item));
        });
        // console.log(item);
    });
    
    promise.then(function() {
        console.log('All done');
    });
    Ответ написан
    Комментировать
  • Как парсить строку в оператор сравнения?

    @cppjunkie
    А как насчет такого:

    function evaluateFilter(filterExpr, param) {
      // Это проверка чтобы всякий нехороший JS-код в eval() не передавался
      if (!/^(>|<|>=|<=|==|!=)\s*[0-9]+$/.test(filterExpr)) {
        throw new Error('Invalid filter expression');
      }
      // param надо перегнать в число чтобы через него тоже не передавали чего попало
      return eval(Number(param) + filterExpr);
    }
    
    console.log(evaluateFilter('>=200', 1000));
    console.log(evaluateFilter('>200', 100));
    console.log(evaluateFilter('==200', 200));
    evaluateFilter('alert("hello world")', 0);


    Обычно eval() не очень рекомендуется использовать, т.к. через него любой код можно выполнять, но если как следует проверять входные данные то почему бы и нет. Хотя проще наверное свой урезанный eval написать для таких сравнений простых.
    Ответ написан
    1 комментарий
  • Как сделать массив по 4 элемента из массива с 48ю элементами?

    @cppjunkie
    По-поему так проще всего

    var a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49];
    var b = [];
    for (var i = 0; i < a.length; i += 4) {
      b.push(a.slice(i, i + 4));
    }
    Ответ написан
    Комментировать