Search code examples
javascriptarraysobjectecmascript-6

best way to convert object with arrays to array with objects and viceversa


what is the best way to convert an object of arrays to an array of objects and vice-versa

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

To

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

Solution

  • You could use two function for generating an array or an object. They works with

    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; }