Ответы пользователя по тегу JavaScript
  • Почему JS делает неверные сравнения?

    e20860
    @e20860
    Работал с СУБД, осваиваю WEB
    Возможно, программа сравнивает значения как строки. Попробуйте привести к типу Number явно. Теория - здесь
    Ответ написан
    Комментировать
  • Как правильно распарсить массив?

    e20860
    @e20860
    Работал с СУБД, осваиваю WEB
    Решение данной задачи предполагает перебор элементов массива и создание на его основе трансформированных новых значений.
    Теория вопроса: Простая и Умная

    Простые (канонические - до ES6) варианты:
    Имеющийся объект для трансформации задан.
    // Имеем объект, представляющий из себя массив простых объектов   
    oldObj = {"mh": [{"id": "BR", "count": 18516, "title": "Brazil"}, 
                     {"id": "US", "count": 4514, "title": "United States"}, 
                     {"id": "MY", "count": 390, "title": "Malaysia"}, 
                     {"id": "IT", "count": 208, "title": "Italy"}
                    ]
    };


    Решения:
    1. С использованием метода map и созданием отдельной функции:
    // при желании функцию трансформации можно назвать конструктором со всеми вытекающими...
    function transform(oO){
        var rv = {}; // return value
        rv.areas = oO.mh.map(function(str){
            var rs    = {};  // return string
            rs.id     = str.id;
            rs.title  = str.title + " - " + str.count;
            return rs;
        });
        return rv;
    };
    var newObj1 = transform(oldObj);
    // В случае конструктора 
    // var newObj1 = new Transform(oldObj)
    console.log(newObj1);
    // полученный объект

    Вариант 1.2 С использованием метода map без создания отдельной функции:
    var newObj2 = {};
    
    newObj2.areas = oldObj.mh.map(function(str){
         var rs    = {};  // return string
         rs.id     = str.id;
         rs.title  = str.title + " - " + str.count;
         return rs;
    });


    2. 1Перебор массива (forEach) без метода map
    var newObj3 = {"areas":[]};
    oldObj.mh.forEach(function(str){
       var ps    = {};  // pushed string
       ps.id     = str.id;
       ps.title  = str.title + " - " + str.count;
       newObj3.areas.push(ps);
    });


    2.2 Перебор массива с использованием цикла for
    var newObj4 = {"areas":[]};
    for (var i = 0; i<oldObj.mh.length;i++) {
       var  str = oldObj.mh[i];
       var ps    = {};  
       ps.id     = str.id;
       ps.title  = str.title + " - " + str.count;
       newObj4.areas.push(ps);
    }
    
    Стрелочные функции, показанные в предыдущих ответах могут работать не во всех браузерах, хотя с точки зрения оптимизации кода - более эффективны...
    Ответ написан
    Комментировать