Jquery - 从垂直格式到水平格式的数据

时间:2014-12-01 05:24:01

标签: javascript jquery angularjs

Fiddle

来自sql的数据以垂直格式存储,我想以横向格式显示它。

这是数据存储在sql server中的方式: - enter image description here

我正在使用angularjs ui-grid来显示数据http://ui-grid.info/docs/#/tutorial/101_intro。我使用ajax从sql中提取此数据,因此会以JSON格式转换。

var jqxhr = jq.ajax({
            type: "POST",
            url: "/Main/getData",              
            data: { catId: catId },
            success: function (data) {                                
                var dataObj = jQuery.parseJSON(data);
....
});

这就是我需要最终数据格式的方式。

 $scope.myData = [
{
   "EmployeeId": "1",
   "OTHINC1": "200",
   "OTHINC2": "100"
},
{
   "EmployeeId": "2",
   "OTHINC1": "300",
   "OTHINC2": "100"
}    
];

2 个答案:

答案 0 :(得分:1)

以下是您可以实现的方法 - fiddle link(请参阅console.log)

var formattedData = [];
for(var i = 0; i < data.length; i++) {
    var obj;
    var matchedIndex = indexOfByProp(formattedData, data[i].EmployeeId, 'EmployeeId');
    if(matchedIndex === -1) { //new employee
        obj = {
            "EmployeeId" : data[i].EmployeeId
        };
        obj[data[i].FieldName] = data[i].Value;//adding value as a property
        formattedData.push(obj);

    } else { //add the new property to obj
        obj = formattedData[matchedIndex];
        obj[data[i].FieldName] = data[i].Value;
    }
}
console.log(formattedData);
function indexOfByProp(arr, val, prop) {
    for(var i = 0; i < arr.length; i++) {
        if(arr[i][prop] === val) {
            return i;
        }
    }
    return - 1;
}

答案 1 :(得分:0)

你可以试试这个:

var result=[];
var indexes = data.map(function (el) {
      return el.EmployeeId;
    });
indexes=$.unique(indexes);
indexes.filter(Create);

function Create(element) {
     obj = {
                "EmployeeId" :element
            };
      for(x in data){
              if(data[x].EmployeeId == element){

                  obj[data[x].FieldName] = data[x].Value;//adding value as a property

      }
    }

      result.push(obj);
}
console.log(result);