2013-05-30 31 views
0

我需要將具有cannonical屬性的對象轉換爲具有嵌套屬性的對象,並用'。'分隔。如何在JavaScript或ExtJS中:obj ['a.b.c'] = 123 => obj.a.b.c = 123?

例子:
來源:

obj['a.b.c'] = 123; 

到:

obj.a.b.c = 123; 

任何優雅的解決方案?

或者也許在ExtJS中有一個解決方案使form.getValues()返回按照名稱分組的字段數組,如fieldname[1]fieldname.1

+0

所以,你必須有'abc'一個字符串,你想作爲一個對象的屬性查找使用,或者你的代碼當前是否賦予像'obj ['abc']'這樣的屬性,但是你想用'obj.abc'指定屬性?我非常困惑。 –

+0

@Quentin我只是在尋找那個非常相同的問題,因爲我記得爲它寫了接受的答案:) – Alnitak

回答

1

查看ClassManager「createNamespaces」中的私有方法。它本質上是你需要做的,除了根不應該默認爲全球性的,它應該默認爲您的對象:

function setValue(o, key, value) { 
    var root = o, 
     parts = key.split('.'), 
     ln = parts.length, 
     part, i; 

    for (i = 0; i < ln; i++) { 
     part = parts[i]; 

     if (typeof part != 'string') { 
      root = part; 
     } else { 
      if (!root[part]) { 
       root[part] = (i === ln - 1) ? value : {}; 
      } 

      root = root[part]; 
     } 
    } 
} 

var o = {}; 
setValue(o, 'a.b.c', 123); 
console.log(o.a.b.c); 
+0

非常感謝! – 4orever

相關問題