2016-07-30 58 views
2

你好,我想创建基于该数据枢轴阵列:如何将数组转换成旋转阵列JS

var data = [ 
    {model_num : "ABC", revision : "AA", value : 31.25, treatment : 'Pressure' }, 
    {model_num : "ABC", revision : "AA", value : 31.25, treatment : 'Gas' }, 
    {model_num : "ABC", revision : "AA", value : 33.12, treatment : 'Temp' }, 
    {model_num : "ABC", revision : "AA", value : 25.87, treatment : 'Current' }, 
    {model_num : "ABC", revision : "AB", value : 26.63, treatment : 'Pressure' }, 
    {model_num : "ABC", revision : "AB", value : 26.00, treatment : 'Gas' }, 
    {model_num : "ABC", revision : "AB", value : 23.75, treatment : 'Temp' } 
]; 

我想最终的结果看起来是这样:

var data=[{model_num : "ABC", revision : "AA", "Pressure":31.25, "Gas":31.25, "Temp": 33.12,"Current":25.87 },{model_num : "ABC", revision : "AB", "Gas":26.00,"Temp":23.75}] 

我有以下代码:

var arr2d2 = []; //new array that is going to contain the merged values. 
    // console.log(arr2d2.length); 
    var arr2d2test = []; 
    var counter=0; 
    data.map(function(element){ 
     //console.log(counter); // this will run 7 times the size of data 
     var outerElement = element; //element is equivalent to one array for example: {model_num : "ABC", revision : "AA", value : 31.25, treatment : 'Pressure' } all 7 in this example 
     //console.log(element); 
    var found = false; //set initially to false. If not found add element to the new array. 
    //console.log(arr2d2.length); 
    for (var i = 0; i < arr2d2.length; i++) 
    { 
     //console.log(i); 
     //console.log(arr2d2[i].model_num); 
     if (arr2d2[i].model_num == outerElement.model_num && arr2d2[i].revision == outerElement.revision) 
     { 
      arr2d2[i][outerElement['treatment']] = outerElement['value']; 
      found = arr2d2[i]; // save the element. 
     // console.log('found variable' + JSON.stringify(found)); 

      break; //stop the loop 
     } 
    }; 

    if (found) 
    { 
     //arr2d2test.push(found.model_num);//   console.log(found.model_num); 
     if (found.value != outerElement.value) 
     { 
     // console.log('TRUE'); 
      found.value.push(outerElement.value); //push the age to the new value. 
     } 
    } 
    else 
    { 
     outerElement.value = [outerElement.value]; //convert age to an array, like you specified. 
    // console.log(outerElement); 
     arr2d2.push(outerElement); //not found yet. push element; 
    } 
counter++; 
}); 
//console.log(arr2d2test); 
console.log(arr2d2); 
console.log(JSON.stringify(arr2d2)); 

当我控制台登录我arr2d2我得到如下:

[{"model_num":"ABC","revision":"AA","value":[31.25,33.12,25.87],"treatment":"Pressure","Gas":31.25,"Temp":33.12,"Current":25.87},{"model_num":"ABC","revision":"AB","value":[26.63,26,23.75],"treatment":"Pressure","Gas":26,"Temp":23.75}] 

这是接近,但不完全是我所需要的。任何帮助将不胜感激。

回答

2

您可以使用forEach循环和可选的thisArg参数来获得所需的结果。

var data = [ 
 
    {model_num : "ABC", revision : "AA", value : 31.25, treatment : 'Pressure' }, 
 
    {model_num : "ABC", revision : "AA", value : 31.25, treatment : 'Gas' }, 
 
    {model_num : "ABC", revision : "AA", value : 33.12, treatment : 'Temp' }, 
 
    {model_num : "ABC", revision : "AA", value : 25.87, treatment : 'Current' }, 
 
    {model_num : "ABC", revision : "AB", value : 26.63, treatment : 'Pressure' }, 
 
    {model_num : "ABC", revision : "AB", value : 26.00, treatment : 'Gas' }, 
 
    {model_num : "ABC", revision : "AB", value : 23.75, treatment : 'Temp' } 
 
]; 
 

 

 
var result = []; 
 
data.forEach(function(e) { 
 
    var a = e.model_num + '|' + e.revision; 
 
    if(!this[a]) { 
 
    this[a] = {model_num: e.model_num, revision: e.revision} 
 
    result.push(this[a]); 
 
    } 
 
    this[a][e.treatment] = e.value; 
 
}, {}); 
 

 
document.body.innerHTML = '<pre>' + JSON.stringify(result, 0, 4) + '</pre>';

+0

感谢@Nenad是做正是我需要的:)! – cocopan