2013-02-18 122 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,或者我会面临分裂字符串和手动建立结构URE?

注意:我意识到,即使首选结构有点奇怪,但有一个Java对象映射到期望这种格式,所以我没有任何选项。

+0

为何你认为解析字符串(即由点分裂)不干净?是的,你将不得不。 – Bergi 2013-02-18 18:40:07

回答

1

你必须解析字符串(parse有点强,只有一个带有循环的split('.'))。

但坦白地说,在清洁的方式,简直是:

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

我更新了我的帖子并删除了“JSON”一词。 “值”键是我的Java对象的一部分。我同意;这很愚蠢。 – senfo 2013-02-18 18:44:08

+0

@senfo:找到了。 :-) – 2013-02-18 18:44:37

+0

我完全同意你的清洁方法。我可能会滥用职权,因为他们不一定与答案相关(换句话说,结构比看起来更复杂),所以在发布时删除了其他属性。从本质上讲,代码开始看起来很混乱(以我的愚见),但我开始认为我是以牺牲代码质量为代价的。 – senfo 2013-02-18 18:50:50