2017-07-18 51 views
-1

的阵列I具有对象数据的像以下结构的阵列:转换对象的阵列分成数组

var mydata=[ 
      {"category" :"phone","name":"Apple","model":"5s"}, 
      {"category" :"phone","name":"Moto","model":"g4"} 
     ] 

欲将此转换成这样的结构数组的数组:

var expextedData=[ 
    ["category","name","model"], 
    ["phone","Apple","5s"], 
    ["phone","Moto","g4"] 
] 
+1

你尝试过什么?你有什么具体问题? –

回答

1

使用Array#map来迭代数组,并用Array#reduce将每个对象转换为它的值。

我正在使用一个硬编码数组而不是使用Object#键来提取它们,因为the order of an object properties is not guaranteed

var mydata=[ 
 
    {"category" :"phone","name":"Apple","model":"5s"}, 
 
    {"category" :"phone","name":"Moto","model":"g4"} 
 
]; 
 
    
 
var keys = ["category","name","model"]; 
 

 
var result = [keys].concat(mydata.map(function(obj) { 
 
    return keys.reduce((arr, key) => { 
 
    arr.push(obj[key]); 
 

 
    return arr; 
 
    }, []) 
 
})); 
 

 
console.log(result);

0

你可以在每个对象的值并添加到任何一个对象也可以推数组和密钥。是这样的:

var mydata=[ 
 
     {"category" :"phone","name":"Apple","model":"5s"}, 
 
     {"category" :"phone","name":"Moto","model":"g4"} 
 
    ] 
 
var arr = []; 
 

 
arr.push(Object.keys(mydata[0])); 
 

 
mydata.forEach(function(ob){ 
 
arr.push(Object.values(ob)); 
 
}) 
 

 
console.log(arr);

0

您可以使用Set摆脱对象的所有独特的键第一个元素,然后mapObject.values得到的值。

var mydata=[{"category" :"phone","name":"Apple","model":"5s"},{"category" :"phone","name":"Moto","model":"g4"}] 
 

 
var result = [[...new Set([].concat(...mydata.map(Object.keys)))], ...mydata.map(Object.values)] 
 
console.log(result)