2016-04-04 41 views
5

給定一個JavaScript對象,如何將它轉換爲對象數組(每個都有鍵,值)?如何將JavaScript對象轉置爲鍵/值數組

例子:

var data = { firstName: 'John', lastName: 'Doe', email: '[email protected]' } 

造成這樣的:

[ 
    { key: 'firstName', value: 'John' }, 
    { key: 'lastName', value: 'Doe' }, 
    { key: 'email', value: '[email protected]' } 
] 
+0

的可能的複製[轉換對象屬性和值的鍵值對數組](https://stackoverflow.com/questions/14615669/convert-objects-properties-and-values-to-array-of-key-value-pairs) – tommyO

回答

7

你可以只遍歷對象的屬性,併爲他們每個人的新對象。

var data = { firstName: 'John', lastName: 'Doe', email: '[email protected]' }; 
var result = []; 

for(var key in data) 
{ 
    if(data.hasOwnProperty(key)) 
    { 
     result.push({ 
      key: key, 
      value: data[key] 
     }); 
    } 
} 
+0

up for'hasOwnProperty ' –

+0

同意!這就是我想念的! –

+0

用於'hasOwnProperty',但由於沒有以功能的方式執行,比如@isvforall –

2
var result = []; 
for(var k in data) result.push({key:k,value:data[k]}); 
10

使用map功能

var data = { firstName: 'John', lastName: 'Doe', email: '[email protected]' }; 
 

 
var result = Object.keys(data).map(key => ({ key, value: data[key] })); 
 

 
console.log(result); 
 

+0

它是ECMAScript 6解決方案嗎? –

+0

@AlexanderPopov是的,它的'箭頭'功能 – isvforall

+2

或者將變量名稱更改爲鍵映射和用戶對象屬性簡寫'key =>({key,value:data [key]})'' –

2

以前的答案使我認爲這是一個更好的辦法...

Object.keys(data).map(function(key) { 
    return { key, value: data[key] }; 
}); 

或ES6使用箭頭功能:

Object.keys(data).map((key) => { key, value: data[key] }); 
4

只要讓您的生活更輕鬆,並使用ES6語法與地圖

var output = Object.keys(data).map(key => { 
     return { 
     key: key, 
     value: data[key] 
     }; 
    }) 
0

或者去野外,使keyvalue鍵可自定義的:

module.exports = function objectToKeyValueArray(obj, keyName = 'key', valueName = 'value') { 
    return Object 
     .keys(obj) 
     .filter(key => Object.hasOwnProperty.call(obj, key)) 
     .map(key => { 
      const keyValue = {}; 
      keyValue[keyName] = key; 
      keyValue[valueName] = obj[key]; 

      return keyValue; 
     }); 
}; 
相關問題