ЙажаСценарий / Говнокод #16906 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
var component_prop = {};
// create property array
for (var i = 0; i < object_data.properties.length; i++) {
    component_prop[object_data.properties[i].name] = object_data.properties[i].value;
}
// convert property arrays to JSON object for parameters on component create
component_prop = JSON.parse(JSON.stringify(component_prop));

может кто-то понимает этот танец?

Запостил: kissarat kissarat, (Updated )

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

  • Если размышлять логически, этот танец (а) выпилит все значения-функции и значения-undefined, (б) не будет работать в IE9 и других старых браузерах, (в) не допустит использования тех значений, которые нельзя экспортировать.
    Может, автор хотел облегчить себе валидацию данных (т.к. переданное в другом модуле значение { toString : function(){ alert(1); } } не порадует), а может он просто уже трое суток не спал.

    P.S. Погуглил хак: deep clone. А может, там были значения-объекты, которые надо было скопировать и изменить?
    Ответить
    • т.е. достаточно проверить есть ли свойство функцией или undefined?
      Ответить
      • Ещё надо проверить, объекты/массивы ли они. И если да, то изменяются ли. Скорее всего, автор применил этот хак из-за копирования.

        var object_data = {
          properties: [
            {name: 'test', value: {x: 42} }
          ]
        };
        
        // код из топика, но без JSON.*
        var component_prop = {};
        // create property array
        for (var i = 0; i < object_data.properties.length; i++) {
            component_prop[object_data.properties[i].name] = object_data.properties[i].value;
        }
        
        console.log(object_data.properties[0].value.x); // 42, как и было
        component_prop.test.x = 4;
        console.log(object_data.properties[0].value.x); // 4, хреново
        Ответить
  • Стандартный подход. Так и в жабе и в AS без лишних затей клонируют объекты.
    Например: govnokod.ru/10222
    Рекурсивное глубокое клонирование таит много граблей.

    Edit: Also deep equals - govnokod.ru/12842
    Ответить
    • В принципе, наверное, не столько копирование, сколько избавление от ссылок на объекты. Хотя в данном случае, не принципиально, поскольку, судя по всему поля name и value наврядли являются сколь-нибудь объектами.
      Ответить

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8