1

I am getting this JSON result from query in node.js with mysql db.

[
   [
     {
      val1:1,
      val2:2,
      val3:3
     }
  ],
  [
    {
      val1:1,
      val2:2,
      val3:3
    }
 ],
 [
    {
      val1:1,
      val2:2,
      val3:3
    }
 ]
]

I Want to Convert into below format, But i am not able to convert all josn object into one json object.

   [ 
     {
      val1:1,
      val2:2,
      val3:3
     },
     {
      val1:1,
      val2:2,
      val3:3
     },
     {
      val1:1,
      val2:2,
      val3:3
     }

 ]
Scott Marcus
  • 64,069
  • 6
  • 49
  • 71
Prashant Gupta
  • 788
  • 8
  • 26

2 Answers2

3

use [].concat.apply([], array)

var arr = [[{val1:1,val2:2,val3:3}],[{val1:1,val2:2,val3:3}],[{val1:1,val2:2,val3:3}]]

console.log([].concat.apply([], arr))
1

For the case if there are not just one object in nested array:

const arrayOfArrays = [
  [{val1:1, val2:2, val3:3}, {val1:1, val2:2, val3:3, val4:4}, {val1:1, val2:2, val3:3, val4:4}],
  [{val1:1, val2:2, val3:3}, {val1:1, val2:2, val3:3, val4:4}],
  [{val4:4, val3:3, val2:2, val1:1}],
  [{val2:2, val1:1, val3:3}, {val3:3, val2:2, val1:1, val4:4}]
]

const arrayOfObjects = [].concat.apply([], arrayOfArrays);

console.log('Flattened:', arrayOfObjects);

const normalizeObject = obj => _(obj).toPairs().sortBy(0).fromPairs().value();

const removeDuplicates = function(array) {
  return [
    ...new Set(
      array.map(item => JSON.stringify(normalizeObject(item)))
    )
  ].map(item => JSON.parse(item));
};

const arrayOfUniqueObjects = removeDuplicates(arrayOfObjects);

console.log('Unique:', arrayOfUniqueObjects);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>

Bonus: check removeDuplicates method in my answer (;



EXTRA: let's extend prototype of Array with 2 methods

const normalizeObject = obj => _(obj).toPairs().sortBy(0).fromPairs().value();

Array.prototype.flattenNested = function() {
  return [].concat.apply([], this);
}

Array.prototype.removeDuplicateObjects = function() {
  return [
    ...new Set(
      this.map(item => JSON.stringify(normalizeObject(item)))
    )
  ].map(item => JSON.parse(item));
}


const arrayOfArrays = [
  [{val1:1, val2:2, val3:3}, {val1:1, val2:2, val3:3, val4:4}, {val1:1, val2:2, val3:3, val4:4}],
  [{val1:1, val2:2, val3:3}, {val1:1, val2:2, val3:3, val4:4}],
  [{val1:1, val2:2, val3:3, val4:4}, {val3:3, val1:1, val2:2}, {val3:3, val2:2, val1:1, val4:4}]
]

const arrayOfObjects = arrayOfArrays.flattenNested();

console.log('Flattened:', arrayOfObjects);


const arrayOfUniqueObjects = arrayOfObjects.removeDuplicateObjects();

console.log('Unique:', arrayOfUniqueObjects);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
num8er
  • 18,604
  • 3
  • 43
  • 57