2017-02-20 46 views
2

什麼是陣列的對象轉換到對象數組和反之亦然的最佳方式最好的方式來與對象陣列,對象,反之亦然轉換爲陣列

{ 
    category : ['a','b','c'], 
    title : ['e','f','g'], 
    code : ['z','x','v'] 
} 

[ 
    { 
    category : 'a', 
    title : 'e', 
    code : 'z' 
    }, 
    { 
    category : 'b', 
    title : 'f', 
    code : 'x' 
    }, 
    { 
    category : 'c', 
    title : 'g', 
    code : 'v' 
    }, 
] 
+0

'Object.keys()'+'Array.reduce()' – Shilly

+0

@amir,它是爲你工作? –

+0

@ Alexandru-IonutMihai yep謝謝:) –

回答

2

你可以使用兩個函數,用於產生一個數組或一個對象。他們的作品與

function getArray(object) { 
 
    return Object.keys(object).reduce(function (r, k) { 
 
     object[k].forEach(function (a, i) { 
 
      r[i] = r[i] || {}; 
 
      r[i][k] = a; 
 
     }); 
 
     return r; 
 
    }, []); 
 
} 
 

 
function getObject(array) { 
 
    return array.reduce(function (r, o, i) { 
 
     Object.keys(o).forEach(function (k) { 
 
      r[k] = r[k] || []; 
 
      r[k][i] = o[k]; 
 
     }); 
 
     return r; 
 
    }, {}); 
 
} 
 

 
var data = { category: ['a', 'b', 'c'], title: ['e', 'f', 'g'], code: ['z', 'x', 'v'] }; 
 

 
console.log(getArray(data)); 
 
console.log(getObject(getArray(data)));
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

非常驚人 –

1

這裏是使用reduce方法和arrow函數的解決方案。

var obj={ 
 
    category : ['a','b','c'], 
 
    title : ['e','f','g'], 
 
    code : ['z','x','v'] 
 
} 
 
var result=obj[Object.keys(obj)[0]].reduce((a,b,i)=>{ 
 
    var newObj={}; 
 
    Object.keys(obj).forEach(function(item){ 
 
    newObj[item]=obj[item][i]; 
 
    }); 
 
    return a.concat(newObj); 
 
},[]); 
 
console.log(result);

1

可以使用map()forEach()

var obj = { 
 
    category : ['a','b','c'], 
 
    title : ['e','f','g'], 
 
    code : ['z','x','v'] 
 
} 
 

 
var result = Object.keys(obj).map(function(e, i) { 
 
    var o = {} 
 
    Object.keys(obj).forEach((a, j) => o[a] = obj[a][i]) 
 
    return o 
 
}) 
 

 
console.log(result)