1

Am not able find logic, Here I need arrange the below data into multidimensional with matrix format,

var data = [
        {
            "matrixData":[8,0],
            "x":8,
            "y":0,
        }, 
        {
            "matrixData":[0,4],
            "x":0,
            "y":4,
        }, 
        {
            "matrixData":[4,0],
            "x":4,
            "y":0,
        },
        {
            "matrixData":[0,0],
            "x":0,
            "y":0,
        }, 
        {
            "matrixData":[4,4],
            "x":4,
            "y":4
        }
    ]

into following order based on row column wise, Expected Result

var data = [
        [
            {
                "matrixData":[0,0],
                "x":0,
                "y":0,
            },
            {
                "matrixData":[4,0],
                "x":4,
                "y":0,
            },
            {
                "matrixData":[8,0],
                "x":8,
                "y":0,
            },
        ],
        [
            {
                "matrixData":[0,4],
                "x":0,
                "y":4,
            }, 
            {
                "matrixData":[4,4],
                "x":4,
                "y":4
            }
        ]        
    ]

here x is row and y is column, is there any possible by using sort method or underscore.js

Kalai
  • 113
  • 2
  • 8

2 Answers2

0

You could sort the array in advance and then group the objects.

var data = [{ matrixData: [8, 0], x: 8, y: 0 }, { matrixData: [0, 4], x: 0, y: 4 }, { matrixData: [4, 0], x: 4, y: 0 }, { matrixData: [0, 0], x: 0, y: 0 }, { matrixData: [4, 4], x: 4, y: 4 }],
    groups = data
        .sort(({ matrixData: a }, { matrixData: b }) => a[1] - b[1] || a[0] - b[0])
        .reduce((r, o, i, a) => {
            if (!i || a[i - 1].matrixData[1] !== o.matrixData[1]) {
                r.push([o]);
            } else{
                r[r.length - 1].push(o);
            }        
            return r;
        }, [])
        
console.log(groups);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392
0

Source javascript | Object grouping

var data = [
  {
    "matrixData":[8,0],
    "x":8,
    "y":0,
  }, 
  {
    "matrixData":[0,4],
    "x":0,
    "y":4,
  }, 
  {
    "matrixData":[4,0],
    "x":4,
    "y":0,
  },
  {
    "matrixData":[0,0],
    "x":0,
    "y":0,
  }, 
  {
    "matrixData":[4,4],
    "x":4,
    "y":4
  }
];
function groupBy(collection, property) {
  var i = 0, val, index,
      values = [], result = [];
  for (; i < collection.length; i++) {
    val = collection[i][property];
    index = values.indexOf(val);
    if (index > -1)
      result[index].push(collection[i]);
    else {
      values.push(val);
      result.push([collection[i]]);
    }
  }
  return result;
}

var obj = groupBy(data, "y");

console.log(obj);
chintuyadavsara
  • 1,509
  • 1
  • 12
  • 23