2016-04-04 26 views
5

Cho đối tượng JavaScript, làm thế nào tôi có thể chuyển đổi nó thành một mảng đối tượng (mỗi đối tượng có khóa, giá trị)?Cách chuyển đối tượng javascript vào mảng khóa/giá trị

Ví dụ:

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

kết quả như:

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

có thể trùng lặp của [Chuyển đổi đối tượng các thuộc tính và giá trị cho mảng của các cặp giá trị khóa] (https://stackoverflow.com/questions/14615669/convert-objects-properties-and-values-to-array-of-key-value-pairs) – tommyO

Trả lời

7

Bạn chỉ có thể lặp qua các thuộc tính của đối tượng và tạo ra một đối tượng mới cho mỗi người trong số họ.

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

lên cho 'hasOwnProperty ' –

+0

Đồng ý! Đó là những gì tôi đã mất tích! –

+0

cho 'hasOwnProperty' nhưng không hoạt động theo cách chức năng, như @isvforall –

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

Sử dụng chức năng 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

Đây có phải là giải pháp ECMAScript 6 không? –

+0

@AlexanderPopov có, đó là chức năng 'arrow' – isvforall

+2

hoặc thay đổi tên biến thành khóa trong bản đồ và sử dụng ký hiệu thuộc tính đối tượng' key => ({key, value: data [key]}) ' –

2

Câu trả lời trước đó dẫn tôi nghĩ rằng đó là một cách tốt hơn ...

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

hoặc trong ES6 sử dụng mũi tên chức năng:

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

Chỉ cần làm cho cuộc sống của bạn dễ dàng hơn và sử dụng cú pháp es6 với một bản đồ

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

Hoặc đi hoang dã và làm cho các phím keyvalue tùy biến:

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; 
     }); 
}; 
Các vấn đề liên quan