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

前端 未结 3 929
我寻月下人不归
我寻月下人不归 2021-01-14 12:45

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\'],
         


        
相关标签:
3条回答
  • 2021-01-14 13:25

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

    0 讨论(0)
  • 2021-01-14 13:28

    Here is solution using reduce method and arrow function.

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

    0 讨论(0)
  • 2021-01-14 13:36

    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)

    0 讨论(0)
提交回复
热议问题