2013-02-18 2 views
1

Я написал следующую функцию JavaScript (часть более крупного «класса»), чтобы гарантировать, что кто-либо, использующий объекты, сохраняет значения атрибутов в свойстве «values».Доступ к под-свойствам JavaScript по имени

function _updateAttributes(attribute, value) { 
    _attributes[attribute] = { values: { value: value }}; 
} 

Он отлично работает для плоской структуры, но разваливается, когда я начинаю пытаться использовать его для вспомогательных свойств.

После запуска следующий код:

myEntity.updateAttribute('name', 'Frankenstein'); 
myEntity.updateAttribute('name.source', 'John Doe'); 

я хотел бы следующую структуру:

{ 
    "attributes": { 
     "name": { 
      "values": { 
       "value": "Frankenstein" 
      }, 
      "source": { 
       "values": { 
        "value": "JohnDoe" 
       } 
      } 
     } 
    } 
} 

Вместо этого он выходит так:

{ 
    "attributes": { 
     "name": { 
      "values": { 
       "value": "Frankenstein" 
      } 
     }, 
     "name.source": { 
      "values": { 
       "value": "JohnDoe" 
      } 
     } 
    } 
} 

Есть ли чистый способ написать этот JavaScript или я столкнусь с расщеплением строк и ручным построением структуры Юр?

ПРИМЕЧАНИЕ: Я понимаю, что даже предпочтительная структура немного странная, но есть объект Java, который я сопоставляю с тем, который ожидает этот формат, поэтому у меня нет никаких параметров здесь.

+0

Почему вы считаете разбором строк (то есть расщепление точек), как нечистые? Да, вам придется. – Bergi

ответ

1

Вам придется разбирать строку (parse немного сильная, всего лишь один split('.') с петлей).

Но, честно говоря, уборщик способ был бы просто:

myEntity.name = {values: 'Frankenstein'}; 
myEntity.name.source = {values: 'John Doe'}; 
+0

Я обновил свой пост и удалил термин «JSON». Ключ «values» является частью моего объекта Java. Согласен; это глупо. – senfo

+0

@senfo: Gotcha. :-) –

+0

Я абсолютно согласен с вашим более чистым подходом. Я, возможно, оскорбительно, убрал дополнительные свойства при публикации, потому что они не обязательно были релевантны ответу (другими словами, структура сложнее, чем кажется). По сути, код начинает выглядеть грязным (по моему скромному мнению), но я начинаю думать, что делаю это за счет качества кода. – senfo