Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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'
  },
]
like image 758
amir hosein ahmadi Avatar asked Mar 09 '23 19:03

amir hosein ahmadi


2 Answers

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

  • Object.keys for getting all own property names,

  • Array#reduce for iterating an array and collecting items for return,

  • Array#forEach just fo itarating an array.

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; }
like image 102
Nina Scholz Avatar answered May 03 '23 19:05

Nina Scholz


You can use map() and 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)
like image 27
Nenad Vracar Avatar answered May 03 '23 19:05

Nenad Vracar