将数据数组排列成 Javascript 中的矩阵顺序

Arrange array of Data into Matrix Order in Javascript

找不到逻辑,这里我需要将下面的数据整理成矩阵格式的多维,

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

按行列顺序排列, 预期结果

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

这里x是行,y是列,有没有办法用sort方法或者underscore.js

可以先对数组进行排序,然后再对对象进行分组。

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

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