Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Добавление объекта в массив в цикле (https://javascript.ru/forum/dom-window/66378-dobavlenie-obekta-v-massiv-v-cikle.html)

Dark19 11.12.2016 22:55

Добавление объекта в массив в цикле
 
Доброго времени суток, пишу фильтр сортировки постов, с объектами не сильно знаком, но хочу все данные раскладывать по объектам, чтобы легче было работать. Суть такова, что аргумент el это класс блоков которые нужно сортировать, а count это количество выводимых блоков. Так вот в цикле я проверяю сколько нужно вывести блоков, задаю им параметры по условию и создаю часть полей объекта, после создаю остальные поля объекта без условия. После чего пробую запихнуть сформированный объект в массив, то есть должен выйти массив с определенным количеством объектов (по количеству постов) и каждый объект имеет различные значения полей, в зависимости от условий, но после проделанных операций вывожу в консоль массив, а все объекты в нем имеют одинаковые значения полей, хотя если я вывожу каждый объект перед записью в массив, то там все нормально, поля с разными значениями. Как заполнить массив объектами правильно чтобы не перезаписывался один и тот же объект на весь массив? Я наверняка, не знаю каких то свойств объекта, почему именно так получается.
function sorting(el,count){
        var cache = [],
            obg = {},
            leftPos = 0,
            topPos = 0;
        $(el).each(function(idx){
            if(idx < count){
                var parentWidth = $(this).parent().width(),
                    elWidth = $(this).outerWidth(),
                    elPrevWidth = $(this).outerWidth();
                $(this).data('show',1).addClass('show');
                if(elWidth + elPrevWidth <= parentWidth){
                    $(this).css({'left':leftPos,'top':topPos});
                    obg.left = leftPos;
                    obg.top = topPos;
                    leftPos += $(this).outerWidth();
                }
            }
            else{
                obg.left = 0;
                obg.top = 0;
            }
            obg.width = $(this).outerWidth();
            obg.height = $(this).outerHeight();
            obg.show = $(this).data('show');
            obg.category = $(this).data('slug');
            cache.push(obg);
        });
    }

рони 11.12.2016 23:01

Dark19,
3 строка перенесите в 6

рони 11.12.2016 23:04

Dark19,
var cache = [],

            leftPos = 0,
            topPos = 0;
        $(el).each(function(idx){ var obg = {};

Dark19 11.12.2016 23:11

Цитата:

Сообщение от рони (Сообщение 437763)
Dark19,
var cache = [],

            leftPos = 0,
            topPos = 0;
        $(el).each(function(idx){ var obg = {};

ахаха, жесть
Спасибо, что раскрыли глаза


Часовой пояс GMT +3, время: 11:39.