Search code examples
javascriptlodashjavascript-objectses6-class

Re-framing array of objects from another array in javascript


Want to create one array from another array of objects as below using javascript. arr is the input array and it should output as outArr

Input Array:

var arr = [
    {name: 'A', flag: 0},
    {email: 'B', flag: 0},
    {address: 'C', flag: 0},
    {name: 'A1', flag: 1},
    {email: 'B1', flag: 1},
    {address: 'C1', flag: 1}
]

Output Array:

var outArr = [
   {
     name: 'A',
     email: 'B',
     address: 'C'
   },
   {
     name: 'A1',
     email: 'B1',
     address: 'C1'
   }
]

Solution

  • You could get the rest of the object and add it to an object of the result array with the flag as index.

    var array = [{ name: 'A', flag: 0 }, { email: 'B', flag: 0 }, { address: 'C', flag: 0 }, { name: 'A1', flag: 1 }, { email: 'B1', flag: 1 }, { address: 'C1', flag: 1 }],
        result = array.reduce((r, { flag, ...o }) => {
            Object.assign(r[flag] = r[flag] || {}, o);
            return r;
        }, []);
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }