2014-09-04 103 views
1

我有JavaScript對象等作爲如何將對象轉換爲關聯數組?

var obj = { 
    param1 : { 
     subParam1: 10, 
     subParam2: 20 
    }, 
    param2: 123 
} 

如果需要轉換隻在根與鍵對象

obj = { 
    'param1.subParam1' : 10, 
    'param1.subParam2' : 20, 
    'param2' : 123 
} 
+0

並且[如果您想以另一種方式...](http://stackoverflow.com/a/11236014/712294)。 – 2014-09-04 13:08:37

回答

2

你可以寫一個簡單的遞歸函數:

function flatten(obj) { 

    var result = {}, 
     temp, key, subkey; 

    for (key in obj) { 
     if (obj.hasOwnProperty(key)) { 
      if (Object.prototype.toString.call(obj[key]) == '[object Object]') { 
       temp = flatten(obj[key]); 
       for (subkey in temp) { 
        result[key + '.' + subkey] = temp[subkey]; 
       } 
      } 
      else result[key] = obj[key]; 
     } 
    } 

    return result; 
} 

看起來像預期的那樣工作:

{param1.subParam1: 10, param1.subParam2: 20, param2: 123} 
+0

+1的工作答案http://jsfiddle.net/chridam/3513LLup/ – chridam 2014-09-04 13:18:43

1

有些人可能稱之爲密集型,有些人可能稱之爲緊湊型,有些可能稱之爲晦澀型,有些可能稱之爲優雅型。

function flatten_object_into_dot_notation(obj) { 

    return function _flatten(obj, prefix, result) { 

     return Object.keys(obj).reduce(function(_, key) { 
      var val = obj[key]; 
      key = prefix + key; 

      if (val && typeof val==='object') { _flatten(val, key + '.', result); } 
      else { result[key] = val; } 

      return result; 
     }, result); 

    }(obj, '', {}); 

} 
相關問題