在JavaScript中操作数组和对象的数据

时间:2018-02-14 17:38:10

标签: javascript

我希望通过稍微转置值来执行对象/数组的一些数据操作。其中行的值变为列。作为一个例子,我有原始数据,看起来像这样

[
  {
    "Team": "D PG",
    "Original_x0020_Size_x0020__x0028": 194,
    "Month": "January"
  },
  {  "Team": "D PP",
    "Original_x0020_Size_x0020__x0028": 143,
    "Month": "January"
  },
  {
    "Team": "D RE",
    "Original_x0020_Size_x0020__x0028": 19,
    "Month": "January"
  },
  {
    "Team": "D GP",
    "Original_x0020_Size_x0020__x0028": 3,
    "Month": "January"
  },
  {
    "Team": "D PC",
    "Original_x0020_Size_x0020__x0028": 2,
    "Month": "January"
  },
  {
    "Team": "D PT",
    "Original_x0020_Size_x0020__x0028": 2,
    "Month": "January"
  },
  {
    "Team": "D PG",
    "Original_x0020_Size_x0020__x0028": 35,
    "Month": "February"
  },
  {
    "Team": "D PP",
    "Original_x0020_Size_x0020__x0028": 120,
    "Month": "February"
  },
  {
    "Team": "D RE",
    "Original_x0020_Size_x0020__x0028": 40,
    "Month": "February"
  },
  {
    "Team": "D GP",
    "Original_x0020_Size_x0020__x0028": 30,
    "Month": "February"
  },
  {
    "Team": "D PC",
    "Original_x0020_Size_x0020__x0028": 9,
    "Month": "February"
  },
  {
    "Team": "D PT",
    "Original_x0020_Size_x0020__x0028": 6,
    "Month": "February"
  }
]

我打算将此更改为

//i'm looking at changing the original data to look like this. The Team will have a position on the array, for example array[0][1](this column will be taken by all values that belong to team 'D PG') and array[0][2](will be taken by all values that belong to the team 'D PP')

// you will notice that all the other values for other months are at zero, thats because i want the initial values to be zero untill data has been put in for them
[
  [
    "January",
    194,
    143,
    19,
    3,
    2,
    2
  ],
  [
    "February",
    35,
    120,
    40,
    30,
    9,
    6
  ],
  [
    "March",
    0,
    0,
    0,
    0,
    0,
    0
  ],
  [
    "April",
    0,
    0,
    0,
    0,
    0,
    0
  ],
  [
    "May",
    0,
    0,
    0,
    0,
    0,
    0
  ],
  [
    "June",
    0,
    0,
    0,
    0,
    0,
    0
  ],
  [
    "July",
    0,
    0,
    0,
    0,
    0,
    0
  ],
  [
    "August",
    0,
    0,
    0,
    0,
    0,
    0
  ],
  [
    "September",
    0,
    0,
    0,
    0,
    0,
    0
  ],
  [
    "October",
    0,
    0,
    0,
    0,
    0,
    0
  ],
  [
    "November",
    0,
    0,
    0,
    0,
    0,
    0
  ],
  [
    "December",
    0,
    0,
    0,
    0,
    0,
    0
  ]
]

我使用for循环来迭代原始Data对象,然后使用if语句按Month和Team对它们进行分组。但代码将变得非常笨重,我相信效率低下。有关更好的方法的任何想法

                 var grouped = eval('[["January",0,0,0,0,0,0],["February",0,0,0,0,0,0],["March"0,0,0,0,0,0],["April",0,0,0,0,0,0],["May",0,0,0,0,0,0],["June"0,0,0,0,0,0],["July",0,0,0,0,0,0],["August",0,0,0,0,0,0],["September",0,0,0,0,0,0],["October",0,0,0,0,0,0],["November",0,0,0,0,0,0],["December",0,0,0,0,0,0]]');

 
 for (i=0; i< dataResult.length; i++) {
                           
                           if((dataResult[i]['Month'] == 'January') && (dataResult[i]['Team'] == 'D PG')){
                               var original = dataResult[i]['Original_x0020_Size_x0020__x0028'];
                                grouped[0][1] =original;
                           }
                         if((dataResult[i]['Month'] == 'January') && (dataResult[i]['Team'] == 'D PP')){
                            var original = dataResult[i]['Original_x0020_Size_x0020__x0028'];
                                grouped[0][2] =original;
                         }
                         if((dataResult[i]['Month'] == 'January') && (dataResult[i]['Team'] == 'D RE')){
                               var original = dataResult[i]['Original_x0020_Size_x0020__x0028'];
                                grouped[0][3] =original;
                           }
                         if((dataResult[i]['Month'] == 'January') && (dataResult[i]['Team'] == 'D GP')){
                            var original = dataResult[i]['Original_x0020_Size_x0020__x0028'];
                                grouped[0][4] =original;
                         }
                          if((dataResult[i]['Month'] == 'January') && (dataResult[i]['Team'] == 'D PC')){
                               var original = dataResult[i]['Original_x0020_Size_x0020__x0028'];
                                grouped[0][5] =original;
                           }
                         if((dataResult[i]['Month'] == 'January') && (dataResult[i]['Team'] == 'D PT')){
                            var original = dataResult[i]['Original_x0020_Size_x0020__x0028'];
                                grouped[0][6] =original;
                         }

1 个答案:

答案 0 :(得分:0)

与往常一样,只需使用哈希表来简化事情:

const result = [], month = {};

// I did not want to put that identifier everywhere... :/
const wtf = "Original_x0020_Size_x0020__x0028";

for(const entry of data){
  if(month[entry.Month]){
     month[entry.Month].push(entry[wtf]);
  } else {
     result.push(month[entry.Month] = [entry.Month, entry[wtf]]);
  }
}