1. JavaScript / Говнокод #14409

    +161

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    var summa = 0;
    for (i = 0; i < data.length; i++) {
        var j = 0;
        for (var key in data[i]) {
            j++;
            if (j == 3) summa += parseFloat(data[i][key]);
        }
    }

    вытаскиваем сумму из массива вида: [{MODEL:"ID-2112",COUNT:"1",PRICE:"14070"}, {...}]
    не! ну трети же, чо..

    Запостил: belukov, 24 Января 2014

    Комментарии (11) RSS

    • Стоит отдельно отметить замечательный формат данных - в котором все числа передаются как строки. Кстати типичная беда ПХП - в нем почему-то нужно явно приводить числа к числам, чтобы сериализация правильно отработала.
      А еще есть 100500 туториалов по использованию Гуглмапс, в которых ж.скриптерам рекомендуется передавать числа как строки, скорее всего благодаря опечатке авторов, но тем не менее растиражированой миллионами.
      Ответить
      • >, в которых ж.скриптерам рекомендуется передавать числа как строки
        Видел в каком-то жсоне. Ох уж эти языки со слабой типизацией...
        Ответить
      • Я думаю, это не опечатка. В JavaScript единственный числовый тип - double. Так что при передаче больших чисел могут начаться проблемы.
        > JSON.parse('{"a": 44444444444444444}')
        { a: 44444444444444450 }
        Ответить
        • Гуглмапс знает Землю до 15 знака?
          По-моему, для 99.9% сайтов такая точность не требуется. А если и требуется, то это чаще всего уже не число по смыслу (например, ID видео на YouTube)
          Ответить
        • Ну, хорошо, вот мы передали "точное" большое число (которое на самом деле строка), и что с ним дальше делать? Тогда уже нужен свой аналог Bignum писать и все такое. Но это явно не тот случай. Да и числа в примере как-то не особенно большие.
          Ответить
          • А обычно это не "число", а какой-то суррогатный ID. С ним не надо ничего делать, только передать дальше (например, сформировать ссылку на какой-нибудь твит, или вызвать стороннний API).
            Ответить
            • > price
              > count
              > суррогатный айди
              I don't think so!
              Ответить
              • Ну а что? :) Суррогатная цена в у.е.
                Ответить
    • О. А почему не просто data.reduce(function(previousValue, currentValue) previousValue+parseFloat(currentValue["price"]), 0)?
      Ответить
      • _.sum(_.pluck(data, 'price'));

        Если уж гнаться за погнными метрами кода.
        Ответить
    • как вариант: Есть хранимая процедура, которая возвращает результсет с 3 колонками. Всё это помещается в массив линкед мапов и передается в браузер. Имена колонок вполне могут поменяться, но колонка с прайсом будет всегда третья
      Ответить

    Добавить комментарий